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

Flutter API请求报错:List<dynamic>无法转为List<Map<String, dynamic>>

错误原因与解决方法

这个错误的核心是类型不匹配:Flutter中json.decode()解析API返回的数组时,默认返回List<dynamic>类型,但你代码中试图将它直接赋值给List<Map<String, dynamic>>,编译器无法确认动态列表里的每个元素都是Map类型,因此抛出类型转换异常。

常见场景与修复方式

假设你的_getAllFurnis()方法类似下面的写法,问题就出在JSON数据的类型转换环节:

Future<List<Furni>> _getAllFurnis() async {
  final response = await http.get(Uri.parse('https://your-api.com/chairs'));
  // 这里直接赋值会触发错误
  List<Map<String, dynamic>> data = json.decode(response.body); 
  return data.map((item) => Furni.fromJson(item)).toList();
}

针对这个问题,有几种可靠的修复方式:

  • 显式转换列表元素类型:用cast()或List.from()把List<dynamic>转为List<Map<String, dynamic>>

    List<dynamic> rawData = json.decode(response.body);
    List<Map<String, dynamic>> data = rawData.cast<Map<String, dynamic>>();
    // 或者
    List<Map<String, dynamic>> data = List<Map<String, dynamic>>.from(rawData);
    
  • 在对象转换时直接处理动态元素:无需提前转换整个列表,在map遍历的时候强制转换单个元素

    Future<List<Furni>> _getAllFurnis() async {
      final response = await http.get(Uri.parse('https://your-api.com/chairs'));
      List<dynamic> rawData = json.decode(response.body);
      return rawData.map((item) => Furni.fromJson(item as Map<String, dynamic>)).toList();
    }
    
  • 确认API返回结构:如果API返回的是嵌套JSON(比如{"furnis": [...]}),你需要先提取数组字段,再做转换,否则会把整个JSON对象当成List处理,也会触发类似错误:

    Map<String, dynamic> responseData = json.decode(response.body);
    List<dynamic> rawData = responseData['furnis'];
    

内容的提问来源于stack exchange,提问作者Shreyas K S

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.26 10:07:18