首页 > 解决方案 > 迭代期间的并发修改:“_GrowableList”的实例(长度:5)。扑

问题描述

我正在尝试对颤动的列表进行更改,但它一直给我这个错误:

Concurrent modification during iteration: Instance(length:5) of '_GrowableList'.

我已经搜索并没有找到适合这种情况的答案或解决方案

这是我的代码:

 void addProductsToCart() {
    int addedAmount = cardNum * widget.currentProduct.price;
    String note = noteTextController.text;
    int total = cardNum * widget.currentProduct.price;
    OrderItem orderItemInstance = OrderItem(
        productName: widget.currentProduct.name,
        productPrice: widget.currentProduct.price.toString(),
        productQuantity: cardNum.toString(),
        productNotes: note,
        productSupplierName: widget.supplierName,
        productImage: widget.currentProduct.image,
        totalPrice: total.toString());
    int theTotal = widget.cart.total;
    if (widget.cart.orderDetails.length > 0){
      for (var item in widget.cart.orderDetails){
        if (item.productName == orderItemInstance.productName){
          item.productQuantity += orderItemInstance.productQuantity;
          item.totalPrice += orderItemInstance.totalPrice;
          theTotal += addedAmount;
        } else {
          widget.cart.orderDetails.add(orderItemInstance);
          theTotal += addedAmount;
        }
      }
    } else {
      theTotal += addedAmount;
      widget.cart.orderDetails.add(orderItemInstance);
    }
    widget.cart.total += total;
    setState(() {});
  }

基于 android studio 中的调试器。在从列表中添加或删除数据的行之一中捕获了错误,如下所示:

      theTotal += addedAmount;
      widget.cart.orderDetails.add(orderItemInstance);

标签: androidiosflutterdart

解决方案


我已经通过在完成之后延迟add部分来解决它loop..这是工作代码:

void addProductsToCart() {
    int addedAmount = cardNum * widget.currentProduct.price;
    String note = noteTextController.text;
    int total = cardNum * widget.currentProduct.price;
    OrderItem orderItemInstance = OrderItem(
        productName: widget.currentProduct.name,
        productPrice: widget.currentProduct.price.toString(),
        productQuantity: cardNum.toString(),
        productNotes: note,
        productSupplierName: widget.supplierName,
        productImage: widget.currentProduct.image,
        totalPrice: total.toString());
    int theTotal = widget.cart.total;
    List<OrderItem> toAdd= [];
    if (widget.cart.orderDetails.length > 0){
      for (var item in widget.cart.orderDetails){
        if (item.productName == orderItemInstance.productName){
          item.productQuantity += orderItemInstance.productQuantity;
          item.totalPrice += orderItemInstance.totalPrice;
          theTotal += addedAmount;
        } else {
          toAdd.add(orderItemInstance);
          theTotal += addedAmount;
        }
      }
    } else {
      theTotal += addedAmount;
//      widget.cart.orderDetails.add(orderItemInstance);
      toAdd.add(orderItemInstance);
    }
    widget.cart.total += total;
    toAdd.forEach((element) {
      widget.cart.orderDetails.add(element);
    });
    setState(() {});
  }

推荐阅读