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

Flu*_*ase 12 dart flutter flutter-provider

我的应用程序有两种类型的用户:管理员和普通用户。我向管理员显示管理屏幕,向普通用户显示普通屏幕。所有用户都需要访问Provider model1。但只有 admin 需要 access 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(
Run Code Online (Sandbox Code Playgroud)

我想提出model2只在AdminScreen。但是,如果我这样做,其他管理页面将无法访问model2Navigator.push因为它们不是AdminScreen.

感谢帮助!

har*_*eri 17

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

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

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

MaterialPageRoute(
  builder: (context) => ChangeNotifierProvider<Model2>.value(
    value: model2,
    child: SecondRoute(),
  ),
);
Run Code Online (Sandbox Code Playgroud)

  • 有没有办法通过使用命名推送方法来公开模型? (3认同)
  • 感谢您的回复!您对“ChangeNotifierProxyProvider”的理解是正确的,我可以访问“model1”。但这仅适用于我访问它的页面。在“Navigator.push()”之后,“model2”将不可用于其他导航路线。可以举个例子吗? (2认同)