dart for循环不遵守if条件

mo49yndu  于 2023-04-27  发布在  其他
关注(0)|答案(1)|浏览(91)

我正在处理3个列表。一个列表包含原始值,另一个列表包含要添加或更新到原始列表的值,另一个列表包含新值。我有一个函数来检查条件是否为真,如果为真,它只是增加原始列表中项目的数量,而不添加元素。如果不为真,则将元素添加到列表中以获取新项,最终将添加到原始列表中。问题是,经过一些使用后,函数停止对条件的React并执行两个操作,增加值并向列表中添加一个新值。你们知道我如何解决这个问题吗?

void addToTable(List<CartProduct> cart) {

if (table!.items!.isNotEmpty) {
 for (int i = 0; i < table!.items!.length; i++) {
    final CartProduct cartProduct = table!.items![i];
 
    for (var element in cart) {
      if (element.productId == cartProduct.productId) {
      
        cartProduct.increment();
        
      } else {
        newItems!.add(element);

       
      }
    }
 
  }
  
  table!.items!.addAll(newItems!);
  newItems!.clear();
  saveTableOrder();
  notifyListeners();

    } else {
  table!.items!.addAll(cart);
  saveTableOrder();
 }
}

46qrfjad

46qrfjad1#

import 'dart:core';

void main() async {
  final table = Table(items: [
    CartProduct(productId: '1'),
    CartProduct(productId: '2'),
  ]);

  void saveTableOrder() {
    print('Saving table order...  $table');
  }

  void addToTable(List<CartProduct> carts) {
    if (table.items.isNotEmpty) {
      final newItems = <CartProduct>[];

      for (var cart in carts) {
        var found = false;
        for (var tableItem in table.items) {
          if (cart.productId == tableItem.productId) {
            tableItem.increment();
            found = true;
            break;
          }
        }
        if (!found) {
          newItems.add(cart);
        }
      }

      table.items.addAll(newItems);
      newItems.clear();
      saveTableOrder();
    } else {
      table.items.addAll(carts);
      saveTableOrder();
    }
  }

  addToTable([
    CartProduct(productId: '2'),
    CartProduct(productId: '3'),
  ]);
  addToTable([
    CartProduct(productId: '2'),
    CartProduct(productId: '3'),
  ]);
}

class CartProduct {
  final String productId;

  int quantity = 1;
  CartProduct({
    required this.productId,
  });

  void increment() {
    quantity++;
  }

  String toString() => 'id: $productId, quantity: $quantity';
}

class Table {
  List<CartProduct> items;
  Table({
    required this.items,
  });

  String toString() => items.toString();
}

// Saving table order...  [id: 1, quantity: 1, id: 2, quantity: 2, id: 3, quantity: 1]
// Saving table order...  [id: 1, quantity: 1, id: 2, quantity: 3, id: 3, quantity: 2]

相关问题