微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

您好,由于应将新的提供程序更新构建器更改为创建,因此我尝试像这样修复我的代码,但出现错误

如何解决您好,由于应将新的提供程序更新构建器更改为创建,因此我尝试像这样修复我的代码,但出现错误

在这里,我为 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;
  }

错误堆栈:

enter image description here

你能帮我找出错误吗,谢谢!

解决方法

您试图将 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 举报,一经查实,本站将立刻删除。