12

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

感谢帮助!

4

1 回答 1

19

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

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

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

MaterialPageRoute(
  builder: (context) => ChangeNotifierProvider<Model2>.value(
    value: model2,
    child: SecondRoute(),
  ),
);
于 2019-09-12T22:04:40.597 回答