android - 迭代期间的并发修改:“_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);
解决方案
我已经通过在完成之后延迟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(() {});
}
推荐阅读
- c - 如何使用 CGO 获得 realpath?
- python - 通过取消堆叠我的多索引在组中设置 sort = False
- javascript - 单击一个时如何折叠其他手风琴内容?
- javascript - JavaScript 比较两个 JSON 文件并仅输出新对象
- javascript - JavaScript:无法让 .push() 命令按预期工作
- python - 在 git bash conda 环境中找不到模块
- css - 如何居中移动菜单标题文本
- oracle-apex - ORA-01756: 字符串中缺少引号- 顶点、甲骨文、PL/SQL
- javascript - 标题左侧图标不会显示 React Native
- javascript - 如果它是一个精确的数字,如何将字符串转换为浮点数,而不仅仅是以javascript中的数字开头