我的应用有2种类型的用户:管理员和普通用户。我向管理员显示管理员屏幕,向普通用户显示普通屏幕。所有用户都需要访问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的后代。

感谢帮助!

最佳答案

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

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



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

09-25 19:43