[英]How reinitialize flutter MultiProvider's all providers data?
[英]How to split a MultiProvider list of providers in Flutter?
我有一個以以下開頭的應用程序:
void main() async {
WidgetsFlutterBinding.ensureInitialized();
final initFuture = MobileAds.instance.initialize();
final adState = AdState(initFuture);
runApp(
MultiProvider(
providers: [
Provider<AdState>(create: (_) => adState),
ChangeNotifierProvider(create: (_) => SomeNotifier1()),
ChangeNotifierProvider(create: (_) => SomeNotifier2()),
ChangeNotifierProvider(create: (_) => SomeNotifier3()),
ChangeNotifierProvider(create: (_) => SomeNotifier4()),
ChangeNotifierProvider(create: (_) => SomeNotifier5()),
ChangeNotifierProvider(create: (_) => SomeNotifier6()),
ChangeNotifierProvider(create: (_) => SomeNotifier7()),
ChangeNotifierProvider(create: (_) => SomeNotifier8()),
ChangeNotifierProvider(create: (_) => SomeNotifier9()),
ChangeNotifierProvider(create: (_) => SomeNotifier10())
],
child: const MyApp()
),
);
}
並且出於測試原因,我想將providers
列表拆分為多個列表,例如:
void main() async {
WidgetsFlutterBinding.ensureInitialized();
final initFuture = MobileAds.instance.initialize();
final adState = AdState(initFuture);
runApp(
MultiProvider(
providers: [
Provider<AdState>(create: (_) => adState),
...list1(),
...list2()
],
child: const MyApp()
),
);
}
List<ChangeNotifierProvider<ChangeNotifier>> list1() =>
[
ChangeNotifierProvider(create: (_) => SomeNotifier1()),
ChangeNotifierProvider(create: (_) => SomeNotifier2()),
ChangeNotifierProvider(create: (_) => SomeNotifier3()),
ChangeNotifierProvider(create: (_) => SomeNotifier4()),
ChangeNotifierProvider(create: (_) => SomeNotifier5())
];
List<ChangeNotifierProvider<ChangeNotifier>> list2() =>
[
ChangeNotifierProvider(create: (_) => SomeNotifier6()),
ChangeNotifierProvider(create: (_) => SomeNotifier7()),
ChangeNotifierProvider(create: (_) => SomeNotifier8()),
ChangeNotifierProvider(create: (_) => SomeNotifier9()),
ChangeNotifierProvider(create: (_) => SomeNotifier10())
];
錯誤:在此消費者小部件上方找不到正確的提供者
發生這種情況是因為您使用的
BuildContext
不包括您選擇的提供者。 有一些常見的情況:等等......
有沒有辦法將MultiProvider
拆分為多個列表?
我也在嘗試類似的東西:
return MultiProvider<Example>(
create: (_) => Example(),
builder: (context) {
return Text(context.watch<Example>()),
}
),
但到目前為止還沒有運氣。
您可以嘗試將 BuildContext 參數添加到返回提供程序的函數中,如下所示
List<ChangeNotifierProvider<ChangeNotifier>> list1(BuildContext context) =>
[
ChangeNotifierProvider(create: (context) => SomeNotifier1()),
ChangeNotifierProvider(create: (context) => SomeNotifier2()),
ChangeNotifierProvider(create: (context) => SomeNotifier3()),
ChangeNotifierProvider(create: (context) => SomeNotifier4()),
ChangeNotifierProvider(create: (context) => SomeNotifier5())
];
List<ChangeNotifierProvider<ChangeNotifier>> list2(BuildContext context) =>
[
ChangeNotifierProvider(create: (context) => SomeNotifier6()),
ChangeNotifierProvider(create: (context) => SomeNotifier7()),
ChangeNotifierProvider(create: (context) => SomeNotifier8()),
ChangeNotifierProvider(create: (context) => SomeNotifier9()),
ChangeNotifierProvider(create: (context) => SomeNotifier10())
];
那么您現在可以像這樣添加提供程序
void main() async {
WidgetsFlutterBinding.ensureInitialized();
final initFuture = MobileAds.instance.initialize();
final adState = AdState(initFuture);
runApp(
MultiProvider(
providers: [
Provider<AdState>(create: (_) => adState),
...list1(context),
...list2(context)
],
child: const MyApp()
),
);
}
這應該會有所幫助。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.