如何解决您好,由于应将新的提供程序更新构建器更改为创建,因此我尝试像这样修复我的代码,但出现错误
在这里,我为 Products() 写了两次不同的尝试 - 没有参数,但在调试中它需要和 Orders(authToken,userId,orders) - 无论如何它都不起作用
void main() => runApp(MyApp());
class MyApp extends StatelessWidget {
@override
Widget build(BuildContext context) {
return MultiProvider(
providers: [
ChangeNotifierProvider.value(
value: Auth(),),ChangeNotifierProxyProvider<Auth,Products>(
create: (_) => Products(),update: (_,auth,prevIoUsProducts) => prevIoUsProducts
..receivetoken1(auth,prevIoUsProducts == null ? [] : prevIoUsProducts.items),// ChangeNotifierProxyProvider<Auth,Products>(
// builder: (ctx,prevIoUsProducts) => Products(
// auth.token,// auth.userId,// prevIoUsProducts == null ? [] : prevIoUsProducts.items,// ),ChangeNotifierProvider.value(
value: Cart(),Orders>(
create: (_) => Orders(authToken,orders),prevIoUsOrders) => prevIoUsOrders
..receivetoken2(auth,prevIoUsOrders == null ? [] : prevIoUsOrders.orders),Orders>(
// builder: (ctx,prevIoUsOrders) => Orders(
// auth.token,// prevIoUsOrders == null ? [] : prevIoUsOrders.orders,// ),],
这是我在 providers\products.dart 中的函数,它在 _items = items 中给了我错误 - “List”类型的值不能分配给“List”类型的变量。 尝试更改变量的类型,或将右侧类型转换为“List”。
class Products with ChangeNotifier {
List<Product> _items = [];
// var _showFavoritesOnly = false;
String authToken;
String userId;
Products(this.authToken,this.userId,this._items);
List<Product> get items {
// if (_showFavoritesOnly) {
// return _items.where((prodItem) => prodItem.isFavorite).toList();
// }
return [..._items];
}
List<Product> get favoriteItems {
return _items.where((prodItem) => prodItem.isFavorite).toList();
}
Product findById(String id) {
return _items.firstWhere((prod) => prod.id == id);
}
void receivetoken1(Auth auth,List<Products> items) {
authToken = auth.token;
userId = auth.userId;
_items = items;
}
订单也一样:
class Orders with ChangeNotifier {
List<OrderItem> _orders = [];
String authToken;
String userId;
Orders(this.authToken,this._orders);
List<OrderItem> get orders {
return [..._orders];
}
void receivetoken2(Auth auth,List<Orders> orders) {
authToken = auth.token;
userId = auth.userId;
_orders = orders;
}
错误堆栈:
你能帮我找出错误吗,谢谢!
解决方法
您试图将 List
中的对象类型设置为与您定义的对象不同的对象。
class Orders with ChangeNotifier {
List<OrderItem> _orders = []; //<-----------Here you define type as OrderItem
String authToken;
String userId;
Orders(this.authToken,this.userId,this._orders);
List<OrderItem> get orders {
return [..._orders];
}
void receiveToken2(Auth auth,List<Orders> orders) { //<--------------- List of Orders
authToken = auth.token;
userId = auth.userId;
_orders = orders; // <---------------- Trying to set a list of OrderItem to list of Orders
}
您的 Product
也是如此,只是有一个小错误
class Products with ChangeNotifier {
List<Product> _items = []; //<----------------- Product
// var _showFavoritesOnly = false;
String authToken;
String userId;
Products(this.authToken,this._items);
void receiveToken1(Auth auth,List<Products> items) { // <--------- Products
authToken = auth.token;
userId = auth.userId;
_items = items;
}
我看不到你的模型,所以不知道哪个是正确的。但是一旦您将它们设置为同一个对象,您就会修复 Provider
的
但是我假设你想要Orders
class Orders with ChangeNotifier {
List<OrderItem> _orders = [];
void receiveToken2(Auth auth,List<OrderItem> orders) {Orders
authToken = auth.token;
userId = auth.userId;
_orders = orders;
}
还有 Products
class Products with ChangeNotifier {
List<Product> _items = [];
void receiveToken1(Auth auth,List<Product> items) {
authToken = auth.token;
userId = auth.userId;
_items = items;
}
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。