Flutter中如何将API返回数据存入数组且每次调用API时追加新数据
实现步骤
1. 定义存储数据的数组
首先在你的业务类(通常是StatefulWidget的State类)中定义一个用于存储所有接口返回结果的数组:
// 泛型指定为你的数据模型类型 List<GetTestFeeMap> testFeeList = [];
2. 修改接口请求方法
原方法末尾的return GetTestFee();会触发无限递归调用,需要删除,并且在请求成功解析完数据后追加到数组中:
Future<void> GetTestFee() async { var jsonResponse; if (encTestId.isNotEmpty) { var response = await http.post( Uri.parse("http://getrbi.in/api/agtyi/GetTestFee"), body: ({ 'EncPartnerId': encLabId, 'EncTestId': encTestId, }) ); if (response.statusCode == 200) { jsonResponse = json.decode(response.body.toString()); getTestFeeObj = GetTestFeeMap.fromJson(jsonResponse); // 核心逻辑:将新返回的数据追加到数组中 testFeeList.add(getTestFeeObj); // 如果是StatefulWidget需要刷新UI,放开下方注释 // setState(() {}); } else { throw Exception("请求失败"); } } else { throw Exception("参数错误,请求失败"); } }
3. 使用map构建动态行
在UI渲染部分直接遍历数组生成行组件即可,以下是ListView场景的示例:
ListView( children: testFeeList.map((feeItem) { return ListTile( title: Text("测试原价:${feeItem.Fee}元"), subtitle: Text("优惠价:${feeItem.DiscountedFee}元,预约费:${feeItem.BookingFee}元"), ); }).toList(), )
补充说明
- 如果需要避免重复添加数据,可以在
add操作前判断数组中是否已存在相同EncTestId的条目,再决定是否追加 - 建议在
GetTestFeeMap模型类中将费用字段转为int/double类型,避免后续计算出现字符串拼接问题
内容的提问来源于stack exchange,提问作者Toujo
相关产品推荐
相关产品推荐

