Flutter 关闭对话框后重置颤振提供程序值
我创建了一个ChangeNotifier,并将其添加到main.dart提供程序列表中,如下所示:Flutter 关闭对话框后重置颤振提供程序值,flutter,dart,provider,Flutter,Dart,Provider,我创建了一个ChangeNotifier,并将其添加到main.dart提供程序列表中,如下所示: ChangeNotifierProvider<AppState>( create: (context) => AppState(), ); showDialog( context: context, builder: (BuildContext context) { return ChangeNotifierProvider.value(
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您的提供商模型可能有问题。