如何解决当我在flutter的didChangeDependencies中调用多个提供程序时,显示错误
当我在didChangeDependencies中调用多个提供程序时。它向我显示此错误:“在处置产品后使用了产品,一旦在产品上调用了dispose(),便无法再使用它。”
这是我在main.dart中的提供商。
MultiProvider(
providers: [
ChangeNotifierProvider(
create: (context) => Auth(),),ChangeNotifierProxyProvider<Auth,Products>(
create: (_) => Products(null),update: (ctx,auth,previousproduct) => Products(auth.userid)
// previousproduct == null ? [] : previousproduct.items),AddressData>(
// create: (context) => AddressData(null,[]),update: (Context,previousAddresses) => AddressData(auth.userid,previousAddresses == null ? [] : previousAddresses.Addresses),Orders>(
// create: (context) => Orders(null,previousorders) => Orders(
auth.userid,previousorders == null ? [] : previousorders.orders),ChangeNotifierProvider(
create: (context) => Cart(),],
这是我在homescreen.dart中的didchange依赖项。
void didChangeDependencies() {
final prod = Provider.of<Products>(context,listen: false);
// TODO: implement didChangeDependencies
prod.fetchandsetproduct();
prod.fetchcategoriesproduct();
final prod2 = Provider.of<Auth>(context,listen: false);
prod2.getcurrentuser();
super.didChangeDependencies();
}
解决方法
You can call any number of provider
AboutusBlock aboutusBlock;
Loader loader;
HomeBlock homeBlock;
InitialBlock initialBlock;
@override
void didChangeDependencies() {
super.didChangeDependencies();
final aboutusBlock = Provider.of<AboutusBlock>(context);
final loader = Provider.of<Loader>(context);
final homeBlock = Provider.of<HomeBlock>(context);
final initialBlock = Provider.of<InitialBlock>(context);
if (this.aboutusBlock != aboutusBlock ||
this.loader != loader ||
this.homeBlock != homeBlock ||
this.initialBlock != initialBlock) {
this.loader = loader;
this.aboutusBlock = aboutusBlock;
this.homeBlock = homeBlock;
this.initialBlock = initialBlock;
Future.microtask((){
homeBlock.getHomeConfig(loader,initialBlock);
aboutusBlock.getAboutUsConfig(loader);});
}
}
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。