Dart:如果在 foreach 循环中退出函数
Dart: Exit a function from if within a foreach loop
我想在 if
语句之后中断函数,但我做不到。
下面是我的代码片段。
void addOrderToCart(Product product, int quantity, String color, String size) {
_lastOrder = Order(product, quantity, _orderId++, color, size);
_orders.forEach((element) {
if(element.product.id == _lastOrder.product.id){
element.colors.add(color);
element.sizes.add(size);
element.quantity = element.quantity + quantity;
notifyListeners();
return;
}
});
_orders.add(_lastOrder);
notifyListeners();
}
谢谢。
我认为你应该 return bool
或任何其他而不是 void
并使用 for
而不是 forEach
.
这是您正在寻找的解决方案。
bool addOrderToCart(Product product, int quantity, String color, String size) {
_lastOrder = Order(product, quantity, _orderId++, color, size);
for(var element in _orders){
if (element.product.id == _lastOrder.product.id) {
element.colors.add(color);
element.sizes.add(size);
element.quantity = element.quantity + quantity;
notifyListeners();
return true;
}
}
_orders.add(_lastOrder);
notifyListeners();
return true;
}
希望对您有所帮助。
美好的一天。
Dart does not support non-local returns, so returning from a callback
won't break the loop. Dart forEach callback returns void.
您可以使用 any
而不是 forEach
因为 any
回调 returns bool。所以你可以修改你的代码如下。
void addOrderToCart(Product product, int quantity, String color, String size) {
_lastOrder = Order(product, quantity, _orderId++, color, size);
final alreadyInCart = _orders.any((element) {
if (element.product.id == _lastOrder.product.id) {
element.colors.add(color);
element.sizes.add(size);
element.quantity = element.quantity + quantity;
notifyListeners();
return true;
}
return false;
});
if (alreadyInCart) {
return;
}
_orders.add(_lastOrder);
notifyListeners();
}
希望对您有所帮助。
编码愉快!
我想在 if
语句之后中断函数,但我做不到。
下面是我的代码片段。
void addOrderToCart(Product product, int quantity, String color, String size) { _lastOrder = Order(product, quantity, _orderId++, color, size); _orders.forEach((element) { if(element.product.id == _lastOrder.product.id){ element.colors.add(color); element.sizes.add(size); element.quantity = element.quantity + quantity; notifyListeners(); return; } }); _orders.add(_lastOrder); notifyListeners(); }
谢谢。
我认为你应该 return bool
或任何其他而不是 void
并使用 for
而不是 forEach
.
这是您正在寻找的解决方案。
bool addOrderToCart(Product product, int quantity, String color, String size) { _lastOrder = Order(product, quantity, _orderId++, color, size); for(var element in _orders){ if (element.product.id == _lastOrder.product.id) { element.colors.add(color); element.sizes.add(size); element.quantity = element.quantity + quantity; notifyListeners(); return true; } } _orders.add(_lastOrder); notifyListeners(); return true; }
希望对您有所帮助。
美好的一天。
Dart does not support non-local returns, so returning from a callback won't break the loop. Dart forEach callback returns void.
您可以使用 any
而不是 forEach
因为 any
回调 returns bool。所以你可以修改你的代码如下。
void addOrderToCart(Product product, int quantity, String color, String size) {
_lastOrder = Order(product, quantity, _orderId++, color, size);
final alreadyInCart = _orders.any((element) {
if (element.product.id == _lastOrder.product.id) {
element.colors.add(color);
element.sizes.add(size);
element.quantity = element.quantity + quantity;
notifyListeners();
return true;
}
return false;
});
if (alreadyInCart) {
return;
}
_orders.add(_lastOrder);
notifyListeners();
}
希望对您有所帮助。
编码愉快!