如何设置购物车商品数量为0及解决0数量商品被误加入购物车的问题
根因分析
- 代码仅对已存在于购物车中的商品做了数量为0时的移除处理,没有覆盖「原本不在购物车中的商品传入数量为0」的场景
- 当要修改数量的商品不在购物车中时,代码直接进入else分支,无论传入的数量是否为0都会将该商品添加到购物车,这就是数量为0的商品被异常加入的核心原因
- 额外隐藏问题:创建新购物车时默认把当前商品传入初始化列表的逻辑也有缺陷,即使用户传入的数量为0,新建购物车时也会先把商品加进去
修复方案
调整else分支逻辑增加数量合法性校验,同时修改新建购物车的初始化逻辑,修改后的代码如下:
Future<void> setProductQuantity({ @required Product product, @required String cartId, @required int quantity, }) async { // 新建购物车时先初始化为空,后续按逻辑判断是否添加商品 Cart cart = getCart(cartId) ?? _createCart(cartId: cartId, products: []); Product productInCart = cart.getProductForId(product.id); if (productInCart != null) { if (quantity == 0) { cart.products.remove(productInCart); } else { productInCart.quantity = quantity; } } else { // 新增判断:只有数量大于0时才把商品添加到购物车 if (quantity > 0) { product.quantity = quantity; cart.products.add(product); } } await persistCart(cart); }
内容的提问来源于stack exchange,提问作者dosytres
相关产品推荐
相关产品推荐

