导航到另一条路线后如何使用Provider?

时间:2019-09-12 20:11:25

标签: flutter dart flutter-provider

我的应用有两种类型的用户:管理员和普通用户。我向管理员显示管理员屏幕,向普通用户显示普通屏幕。所有用户都需要访问Provider 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中。但是,如果我这样做,其他管理页面将无法访问model2之后的Navigator.push,因为它们不是AdminScreen的后代。

感谢帮助!

1 个答案:

答案 0 :(得分:0)

您可以将现有模型向前传递,以使用现有模型的值创建一个新的ChangeNotifierProvider

为此,您需要使用ChangeNotifierProvider.value构造函数,将现有的model2传递为值。

  

如果您已经有一个ChangeNotifier实例并想要公开它,则应使用ChangeNotifierProvider.value而不是默认构造函数。

MaterialPageRoute(
  builder: (context) => ChangeNotifierProvider.value(
    value: model2,
    child: SecondRoute(),
  ),
);