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();

  }

希望对您有所帮助。

编码愉快!