![](/img/trans.png)
[英]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.