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

Flutter类型转换异常:_InternalLinkedHashMap无法转为List的解决求助

Flutter JSON API加载异常解决方案:_InternalLinkedHashMap转List失败

异常核心原因

你遇到的错误本质是:API返回的JSON根结构是对象(对应Dart的_InternalLinkedHashMap<String, dynamic>),但代码里强行将其转换为List<dynamic>。即使更换API,只要新API的根结构仍是对象,就会触发相同异常。

解决步骤

1. 确认API返回的JSON结构

先通过控制台打印解析后的原始数据,明确JSON结构:
在json.decode(content)后添加打印代码:

final dynamic decodedData = json.decode(content);
print(decodedData); // 查看控制台输出的JSON结构

常见的两种API返回结构:

  • 根为数组(List):[{"gbeli":{"title":"示例标题"}}, ...]
  • 根为对象,内部包含数组:{"data": [{"gbeli":{"title":"示例标题"}}, ...]}

2. 修改数据解析逻辑

根据实际JSON结构调整代码:

情况1:API根结构是对象,内部包含数组

假设数组字段名为data,修改_fetchDataAkhbarGbeli方法:

Future<void> _fetchDataAkhbarGbeli() async {
  const apiUrl = '你的API地址';
  HttpClient client = HttpClient();
  client.autoUncompress = true;

  try {
    final HttpClientRequest request = await client.getUrl(Uri.parse(apiUrl));
    request.headers.set(HttpHeaders.contentTypeHeader, "application/json; charset=UTF-8");
    final HttpClientResponse response = await request.close();

    final String content = await response.transform(utf8.decoder).join();
    final dynamic decodedData = json.decode(content);

    setState(() {
      // 替换为API实际的数组字段名(如data、items等)
      _loadedAkhbarGbeli = decodedData['data'] as List;
    });
  } catch (e) {
    print('数据加载失败: $e');
    // 可在此添加用户友好的错误提示,比如显示错误页面
  }
}

情况2:API根结构是数组

若确认返回根为数组,可保留类型转换,但建议先判断类型避免崩溃:

Future<void> _fetchDataAkhbarGbeli() async {
  // ... 其他代码不变
  final dynamic decodedData = json.decode(content);
  
  setState(() {
    _loadedAkhbarGbeli = decodedData is List ? decodedData : [];
  });
}

3. 验证ListView数据访问逻辑

确保_loadedAkhbarGbeli的元素结构与API返回一致,比如API返回的每个数组元素确实包含gbeli->title层级,若结构不同需对应调整Text的参数:

// 示例:若结构是_loadedAkhbarGbeli[index]['title'],则修改为
Text(_loadedAkhbarGbeli[index]["title"])

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.21 07:45:32