如何在Flutter中访问和修改任何文件中的变量?

qni6mghb  于 2023-06-30  发布在  Flutter
关注(0)|答案(1)|浏览(157)

新手在这里扑和编程。几天来,我一直找不到一个合适的解决方案:问题是我需要一个来自DataWidget的变量,在我的MapWidget中。但是当小部件被调用时,我不能传递它(例如:MapWidget(变量:因为MapWidget不是在DataWidget中调用的,而是在main中调用的。因此,我想知道我如何才能访问一个变量,并修改它从一个小部件,是相同的水平/更高的部件树?

class _MyAppState extends State<MyApp> {
  @override
  Widget build(BuildContext context) {
    return MaterialApp(
      title: 'Sensors Demo',
      theme: ThemeData(
        useMaterial3: true,
        colorSchemeSeed: const Color(0x9f4376f8),
      ),
      initialRoute: '/',
      routes: {
        '/': (ctx) => DataWidget(),
        MapWidget.routeName: (ctx) => MapWidget()
      },
    );
  }
}

我试图使它成为一个全局变量,但值不更新时修改,所以我离开了我的其他部件的初始值(这是一个GPSPositionValue,所以它的更新continuoulsy),我被告知全局变量不是最好的。我也遇到了riverpod,但没有完全理解如何访问和修改跨部件的值。我想我需要使用状态提供程序,但从我所看到的,我只能在Widget构建中使用它?我不知道如何使用它。希望我的英语够清楚

jaql4c8m

jaql4c8m1#

为了从DataWidget类访问更新后的值,可以为其创建一个提供程序。
正如你提到的Riverpod,这是获得其参考和更新价值的最简单方法。
只需创建一个返回示例的提供程序:

final dataWidgetProvider = Provider<DataWidget>((ref) => DataWidget());

将您的StatefulWidget转换为ConsumerStatefulWidget,并将相应的State<MyApp>转换为ConsumerState<MyApp>ConsumerState类会自动获取一个ref作为属性,这样您就可以使用它来获取和查看所需变量的值。

final dataWidget = ref.watch(dataWidgetProvider);

有关更多信息,请查看Riverpod文档:Riverpod documentation

相关问题