如何解决关闭对话框后重置Flutter提供者值
我已经创建了一个ChangeNotifier并将其添加到main.dart提供程序列表中,如下所示:
ChangeNotifierProvider<AppState>(
create: (context) => AppState(),);
,我有一个对话框,我将其包装在ChangeNotifierProvider.value
中,以便可以访问对话框中的提供程序,如下所示:
showDialog(
context: context,builder: (BuildContext context) {
return ChangeNotifierProvider.value(
value: AppState(),child: LanguageDialog(),);
});
});
但是问题是,当我在对话框内的提供者状态下设置一些数据时,只要我在对话框内,它就可以正常工作!当我关闭对话框时,状态将重置!我不知道为什么会这样。 另外,我尝试在其他路由中设置某些状态,结果是该路由中的状态数据与对话框不同。
我在做什么错了?
解决方法
ChangeNotifierProvider.value创建一个新的AppState实例并传递到您的对话框。它与您的全局AppState实例不同。无需为对话框创建新的提供程序,您可以使用对话框内的Provider.of
函数访问提供程序。
var appState = Provider.of<AppState>(context);
您可以访问LanguageDialog
内部的提供者,也可以通过这样的参数传递它:
showDialog(
context: context,builder: (BuildContext context) {
return LanguageDialog(
appState: Provider.of<AppState>(context);
);
}),});
,
这里的问题是提供程序的范围是相同的路由,并且由于您通过对话框导航到新路由,因此当您退出该对话框时,提供程序不会存储该值。
确保在 MaterialApp 之上创建您的提供程序,以便提供程序的范围限定于整个应用程序。您可以像这样指定它:-
ChangeNotifierProvider<AppState>(
create: (context) => AppState(),child: MaterialApp(
home: HomeScreen())
);
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。