Flutter 导航到另一个路由后如何使用提供程序?
我的应用程序有两种类型的用户:管理员和普通用户。我向管理员显示管理屏幕,向普通用户显示普通屏幕。所有用户都需要访问Flutter 导航到另一个路由后如何使用提供程序?,flutter,dart,flutter-provider,Flutter,Dart,Flutter Provider,我的应用程序有两种类型的用户:管理员和普通用户。我向管理员显示管理屏幕,向普通用户显示普通屏幕。所有用户都需要访问提供商model1。但只有管理员需要访问model2 如何仅为管理员用户初始化model2 例如: class MyApp extends StatelessWidget { final model1 = Model1(); final model2 = Model2(); @override Widget build(BuildContext context)
提供商
model1
。但只有管理员需要访问model2
如何仅为管理员用户初始化model2
例如:
class MyApp extends StatelessWidget {
final model1 = Model1();
final model2 = Model2();
@override
Widget build(BuildContext context) {
return MultiProvider(
providers: [
ChangeNotifierProvider(builder: (_) => model1),
ChangeNotifierProvider(builder: (_) => model2),
],
child: MaterialApp(
我只想将model2
放在AdminScreen
中。但如果我这样做,其他管理员页面将无法在Navigator.push之后访问model2
,因为它们不是AdminScreen
的后代
谢谢你的帮助 您可以将现有模型向前传递,使用现有模型的值创建新的ChangeNotifierProvider
为此,您需要使用ChangeNotifierProvider.value
构造函数传递现有的model2
作为值
如果您已经有一个ChangeNotifier实例并希望公开它,那么应该使用ChangeNotifierProvider.value而不是默认构造函数
materialpage路线(
生成器:(上下文)=>ChangeNotifierProvider.value(
价值:型号2,
子级:SecondRoute(),
),
);
感谢您的回复!您使用的ChangeNotifierProxyProvider
是正确的,我可以访问model1
。但这将只是我访问它的页面的范围model2
在Navigator.push()之后将不可用于其他导航路线。您可以举个例子?将推送的子对象包装到changeNotifierProxy提供程序中
,这样您就可以复制现有model2的状态谢谢!!我试过了,但不知道怎么做。我仍然收到错误,无法找到正确的提供程序。你的意思是:Navigator.push(model2)
。你可以给代码吗?@firebase我已经更改了我的答案,因为ProxyProvider不会解决你的问题有没有办法通过使用命名的push方法公开th模型?