Flutter中调用API新增List数据后列值总和计算错误怎么解决
错误原因
求和错误的核心原因是每次执行累加逻辑前没有清空旧的求和变量值。
你每次API调用成功后,先给reponseArray添加新元素,接着遍历整个数组的所有元素累加到feeSum、discountSum、bookingSum三个变量中,但这三个变量中还保留着上一次遍历累加的结果,相当于之前的所有元素被重复计算了。和你列举的错误表现完全一致:
- 第1次API调用:数组为
[100],累加后feeSum = 100 - 第2次API调用:数组为
[100,1],累加时保留了上一次的100,再加上全数组遍历的100+1,最终得到feeSum = 201,远高于预期的101。
修复方案
提供两种可选修复方式:
方式1:累加前重置求和变量
每次遍历全数组计算总和前,先将三个求和变量重置为0,避免旧值干扰:
if (response.statusCode == 200) { print("Correct"); print(response.body); jsonResponse = json.decode(response.body.toString()); print(jsonResponse); getTestFeeObj=GetTestFeeMap.fromJson(jsonResponse); setState(() { reponseArray.add(getTestFeeObj!); // 新增:累加前清空求和变量旧值 feeSum = 0; discountSum = 0; bookingSum = 0; for(GetTestFeeMap elem in reponseArray){ feeSum += elem.fee! ; discountSum += elem.discountedFee! ; bookingSum += elem.bookingFee! ; } print(feeSum); print(discountSum); print(bookingSum); }); }
方式2:直接累加新元素值(效率更高)
因为每次仅新增一个元素,不需要遍历整个数组计算总和,直接累加新返回对象的属性即可:
if (response.statusCode == 200) { print("Correct"); print(response.body); jsonResponse = json.decode(response.body.toString()); print(jsonResponse); getTestFeeObj=GetTestFeeMap.fromJson(jsonResponse); setState(() { reponseArray.add(getTestFeeObj!); // 直接累加新元素属性,无需遍历全数组 feeSum += getTestFeeObj.fee! ; discountSum += getTestFeeObj.discountedFee! ; bookingSum += getTestFeeObj.bookingFee! ; print(feeSum); print(discountSum); print(bookingSum); }); }
其他注意
你定义的数组变量名为reponseArray,拼写存在小疏漏(正确拼写为responseArray,少了字母s),不影响代码运行,仅为编码规范层面的优化建议。
内容的提问来源于stack exchange,提问作者Toujo
相关产品推荐
相关产品推荐

