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

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.04 05:57:04