【发布时间】:2020-04-26 16:52:48
【问题描述】:
我正在使用MultiProvider,但出现此错误:
Unhandled Exception: A Products was used after being disposed. Once you have called dispose() on a Products, it can no longer be used.
这是我的 main.dart 文件。这个结构有什么问题?
class MyApp extends StatelessWidget {
@override
Widget build(BuildContext context) {
return MultiProvider(
providers: [
ChangeNotifierProvider.value(
value: Auth(),
),
ChangeNotifierProxyProvider<Auth, Products>(
update: (ctx, auth, previousProducts) => Products(
auth.token,
auth.userId,
previousProducts == null ? [] : previousProducts.items,
),
),
ChangeNotifierProvider.value(
value: Cart(),
),
ChangeNotifierProxyProvider<Auth, Orders>(
update: (ctx, auth, previousOrders) => Orders(
auth.token,
auth.userId,
previousOrders == null ? [] : previousOrders.orders,
),
),
],
child: Consumer<Auth>(
builder: (ctx, auth, _) => MaterialApp(
title: 'MyShop',
theme: ThemeData(
primarySwatch: Colors.purple,
accentColor: Colors.deepOrange,
fontFamily: 'Lato',
),
home: auth.isAuth
? ProductOverviewScreen()
: FutureBuilder(
future: auth.tryAutoLogin(),
builder: (ctx, authResultSnapshot) =>
authResultSnapshot.connectionState ==
ConnectionState.waiting
? SplashScreen()
: AuthScreen(),
),
routes: {
ProductDetailScreen.routeName: (ctx) => ProductDetailScreen(),
CartScreen.routeName: (ctx) => CartScreen(),
OrdersScreen.routeName: (ctx) => OrdersScreen(),
UserProductsScreen.routeName: (ctx) => UserProductsScreen(),
EditProductsScreen.routeName: (ctx) => EditProductsScreen(),
},
),
),
);
}
}
【问题讨论】:
-
我遇到了同样的问题,我看到问题已经提交了一段时间。你能得到任何答案吗?
-
我觉得这个结构没什么问题。 (至少我不知道出了什么问题)它看起来很像一个错误,因为我在具有这种结构的不同项目中没有出错。
-
我得到了完全相同的错误,但设置非常相似。有没有找到解决办法?