Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/shell/5.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Flutter 关闭对话框后重置颤振提供程序值_Flutter_Dart_Provider - Fatal编程技术网

Flutter 关闭对话框后重置颤振提供程序值

Flutter 关闭对话框后重置颤振提供程序值,flutter,dart,provider,Flutter,Dart,Provider,我创建了一个ChangeNotifier,并将其添加到main.dart提供程序列表中,如下所示: ChangeNotifierProvider<AppState>( create: (context) => AppState(), ); showDialog( context: context, builder: (BuildContext context) { return ChangeNotifierProvider.value(

我创建了一个ChangeNotifier,并将其添加到main.dart提供程序列表中,如下所示:

ChangeNotifierProvider<AppState>(
    create: (context) => AppState(),
);
showDialog(
    context: context,
    builder: (BuildContext context) {
      return ChangeNotifierProvider.value(
        value: AppState(),
        child: LanguageDialog(),
      );
    });
});
但问题是,当我在对话框中设置提供者状态中的一些数据时,只要我在对话框中,它就可以正常工作!当我关闭对话框时,状态重置!我不知道为什么会这样。 我还尝试在另一个路由中设置一些状态,结果是该路由中的状态数据与对话框中的数据不同


我做错了什么?

ChangeNotifierProvider.value创建一个新的AppState实例并传递到对话框。它与全局AppState实例不同。您可以使用对话框中的
provider.of
函数访问提供程序,而不是为对话框创建新的提供程序

var-appState=Provider.of(上下文);
您可以访问
LanguageDialog
中的提供程序,也可以通过如下参数传递它:

showDialog(
上下文:上下文,
生成器:(BuildContext上下文){
返回语言对话框(
appState:Provider.of(上下文);
);
}),
});

这里的问题是,提供程序的作用域是相同的路由,并且由于您正在通过对话框导航到新路由,因此当您退出该对话框时,提供程序不会存储该值

确保在MaterialApp上方创建您的提供者,以便该提供者的范围覆盖整个应用程序。您可以这样指定它:-

ChangeNotifierProvider<AppState>(
    create: (context) => AppState(),
    child: MaterialApp(
       home: HomeScreen())
);
ChangeNotifierProvider(
create:(context)=>AppState(),
孩子:MaterialApp(
主页:主屏幕()
);

谢谢您的回答,但我尝试过在对话框中使用
提供程序。但是我总是得到一个错误,即在这个小部件上面找不到提供程序,我还尝试了您的第二个解决方案,将提供程序实例传递给小部件,它成功了,但有一个问题是小部件中的数据没有更新,对此我能做些什么?@Komeyl94您的提供商模型可能有问题。