我的应用程序有两种类型的用户:管理员和普通用户。我向管理员显示管理屏幕,向普通用户显示普通屏幕。所有用户都需要访问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
中。但是,如果我这样做,其他管理页面将无法在 Navigator.push
之后访问 model2
,因为它们不是 AdminScreen
的后代。
感谢您的帮助!
最佳答案
您可以使用现有模型的值向前传递现有模型,创建一个新的 ChangeNotifierProvider
。
为此,您需要使用 ChangeNotifierProvider.value
构造函数传递现有 model2
作为值。
If you already have an instance of ChangeNotifier and want to expose it, you should use ChangeNotifierProvider.value instead of the default constructor.
MaterialPageRoute(
builder: (context) => ChangeNotifierProvider<Model2>.value(
value: model2,
child: SecondRoute(),
),
);
关于flutter - 导航到另一条路线后如何消费Provider?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/57913888/