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

Flutter请求REST API报错:_InternalLinkedHashMap不是List<dynamic>子类型

Flutter API数据加载类型不匹配问题修复

报错原因

  • 核心问题是接口返回的JSON根结构为对象(Map<String, dynamic>类型),但代码中直接将json.decode的结果赋值给List类型变量,类型强制转换失败触发报错。
  • 你所调用的测试接口返回的JSON并不是直接以数组作为根结构,而是外层包裹了一层对象,实际需要的业务列表存储在该对象的某个属性下。

修复步骤

  1. 首先确认接口返回的完整JSON结构,找到存储业务列表的属性名,通用结构参考如下:
{
  "code": 200,
  "msg": "success",
  "data": [
    {"empno":1, "ename":"张三", "sal":10000},
    {"empno":2, "ename":"李四", "sal":12000}
  ]
}

上述示例中列表存放在data属性中。
2. 修改fetchData方法的解析逻辑,先解析根对象再取出列表属性:

Future <List<Data>> fetchData() async {
  final response =  await http.get(Uri.https('json-generator.com', 'api/json/get/cqwVqdOFrC?indent=2'));

  if (response.statusCode == 200) {
    // 解析根结构为Map
    final Map<String, dynamic> rootMap = json.decode(response.body);
    // 替换为你接口实际存放列表的属性名
    final List listData = rootMap['data'];
    return listData.map((item) => Data.fromJson(item)).toList();
  } else {
    throw Exception('Error!');
  }
}

额外注意

如果不确定接口返回的结构,可以在解析前添加print(response.body)打印返回内容,确认列表对应的属性名后再修改代码即可。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.17 00:45:08