web-dev-qa-db-ja.com

別のルートに移動した後にプロバイダを消費する方法は?

My Appには、2種類のユーザーがあります。adminとnormal。管理画面をadminおよび標準画面に通常のユーザーに表示します。すべてのユーザーがアクセスProvidermodel1にアクセスする必要があります。しかし、管理者だけが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(

AdminScreenだけmodel2を置きたいです。ただし、このような他の管理ページは_AdminScreenの子孫ではないため、model2の後にNavigator.Pushにアクセスできません。

手伝ってくれてありがとう!

9
FlutterFirebase

既存のモデルフォワードを渡すことができます。既存のものの値を使用して、新しいChangeNotifierProviderを作成できます。

そのためには、既存の_ChangeNotifierProvider.value_を値として渡す_model2_コンストラクタを使用する必要があります。

ChangenoTifierのインスタンスがすでにインスタンスされている場合は、デフォルトのコンストラクタの代わりにChangeNotifierProvider.valueを使用する必要があります。

_MaterialPageRoute(
  builder: (context) => ChangeNotifierProvider.value(
    value: model2,
    child: SecondRoute(),
  ),
);
_
1
haroldolivieri