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模型?