使用ChangeNotifierProxyProvider时我的应用无法正常工作。
链接到我的项目是:https://github.com/BH4R47k/Practice-Shopping-App.git我希望有人下载该项目并运行它以解决我的问题。
[在使用ChangeNotifierProxyProvider的main.dart文件中查看。我想知道我做错了什么(不仅在main.dart中,而且在完整的项目中,[在上面给出了链接]),如果有人解决了我的问题,我也将不胜感激。
而且我还将我的代码放在main.dart中
import 'package:flutter/material.dart';
import 'package:provider/provider.dart';
import './screens/splash_screen.dart';
import './screens/cart_screen.dart';
import './screens/products_overview_screen.dart';
import './screens/product_detail_screen.dart';
import './providers/products.dart';
import './providers/cart.dart';
import './providers/orders.dart';
import './providers/auth.dart';
import './screens/orders_screen.dart';
import './screens/user_products_screen.dart';
import './screens/edit_product_screen.dart';
import './screens/auth_screen.dart';
void main() => runApp(MyApp());
class MyApp extends StatelessWidget {
@override
Widget build(BuildContext context) {
return MultiProvider(
providers: [
ChangeNotifierProvider.value(
value: Auth(),
),
ChangeNotifierProxyProvider<Auth, Products>(
create: (context) => Products(
Provider.of<Products>(context).authToken,
Provider.of<Products>(context).userId,
Provider.of<Products>(context).items,
),
update: (context, auth, previousProducts) => Products(
auth.token,
auth.userId,
previousProducts == null ? [] : previousProducts.items,
),
),
ChangeNotifierProvider.value(
value: Cart(),
),
ChangeNotifierProxyProvider<Auth, Orders>(
create: (context) => Orders(
Provider.of<Orders>(context).authToken,
Provider.of<Orders>(context).userId,
Provider.of<Orders>(context).orders,
),
update: (context, 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
? ProductsOverviewScreen()
: 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(),
EditProductScreen.routeName: (ctx) => EditProductScreen(),
},
),
),
);
}
}
提前感谢。
我在构造函数中使用了Optional Parameters,因此我不必在main.dart文件中传递任何内容。
products.dart(带有可选参数)的代码块看起来像:
List<Product> _items;
String authToken = '';
String userId = '';
Products(this._items, [this.authToken, this.userId]);
同样,orders.dart的代码块已更改。
main.dart文件的代码块如下:
ChangeNotifierProxyProvider<Auth, Products>(
create: (_) => Products([]),
update: (ctx, auth, previousProducts) => Products(
previousProducts == null ? [] : previousProducts.items,
auth.token,
auth.userId,
),
),
ChangeNotifierProvider.value(
value: Cart(),
),
ChangeNotifierProxyProvider<Auth, Orders>(
create: (_) => Orders([]),
update: (ctx, auth, previousOrders) => Orders(
previousOrders == null ? [] : previousOrders.orders,
auth.token,
auth.userId,
),
),