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



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

ChangeNotifierProvider<AppState>(
create: (context) => AppState(),
);

我有一个对话框,我将其封装在ChangeNotifierProvider.value中,以便访问对话框中的提供者,如下所示:

showDialog(
context: context,
builder: (BuildContext context) {
return ChangeNotifierProvider.value(
value: AppState(),
child: LanguageDialog(),
);
});
});

但问题是,当我在对话框中设置一些处于提供者状态的数据时,只要我在对话框内,它就可以正常工作!当我关闭对话框时,状态重置!我不知道为什么会发生这种事。此外,我还尝试在另一条路由中设置一些状态,结果是该路由中的状态数据与对话框不一样。

我在这里做错了什么?

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

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())
);

相关内容

最新更新