You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Flutter购物车更新商品数量时触发JSON空文档解析错误

购物车更新数量时JSON解析空错误的排查与修复

1. 先解决数据类型混乱的隐患

你的代码里存在价格类型不统一的问题,这很可能是引发后续错误的根源:

  • 在addToCart中,price和total直接取productsList里的sale_price,如果这个值是字符串类型,后续updateQuantity里的double.parse能正常工作;但如果是数字类型(int/double),double.parse会直接报错,甚至导致JSON序列化时出现异常。
  • 修复方式:在添加商品时就统一把价格转成double存储:
addToCart(int index) async {
  // 先统一转换价格类型,避免后续解析错误
  final salePrice = double.parse(productsList[index]['sale_price'].toString());
  Map data = {
    "product_name": productsList[index]['english_name'],
    "price": salePrice,
    "qty": 1,
    "total": salePrice,
  };
  cartProducts.add(data);
  countTotalPrice();
  update();
}

2. 优化更新数量的逻辑

updateQuantity里直接用double.parse(data['price'])存在风险,既然已经统一了价格类型,直接用类型转换更安全:

updateQuantity(index, count) {
  final product = cartProducts[index];
  product['qty'] = count;
  // 直接用已存储的double类型价格计算
  product['total'] = (product['price'] as double) * count;
  countTotalPrice();
  update();
}

3. 定位JSON空文档的核心原因

错误Unable to parse JSON message: The document is empty本质是发送HTTP请求时请求体为空,和当前本地计算逻辑关联不大,建议排查:

  • 提交购物车数据到后端的代码,确认是否正确序列化了cartProducts,有没有出现数据为空的情况;
  • 打印cartProducts的内容,检查更新数量后数据是否正常,有没有空字段导致JSON序列化失败;
  • 核对后端接口的参数要求,确保必填字段都已正确传入。

4. 简化总价计算的代码

countTotalPrice里的循环可以用fold简化,同时增加类型检查避免强制转换报错:

void countTotalPrice() { // 这里不需要async,没有异步操作
  totalPrice = cartProducts.fold(0.0, (sum, item) {
    final total = item['total'];
    // 兼容int/double类型,避免转换失败
    return sum + (total is double ? total : (total is int ? total.toDouble() : 0.0));
  });
  update();
}

内容的提问来源于stack exchange,提问作者Swapnil Mane

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.05 15:05:21