我的应用有两种类型的用户:管理员和普通用户。我向管理员显示管理员屏幕,向普通用户显示普通屏幕。所有用户都需要访问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
的后代。
感谢帮助!
答案 0 :(得分:0)
您可以将现有模型向前传递,以使用现有模型的值创建一个新的ChangeNotifierProvider
。
为此,您需要使用ChangeNotifierProvider.value
构造函数,将现有的model2
传递为值。
如果您已经有一个ChangeNotifier实例并想要公开它,则应使用ChangeNotifierProvider.value而不是默认构造函数。
MaterialPageRoute(
builder: (context) => ChangeNotifierProvider.value(
value: model2,
child: SecondRoute(),
),
);