Flutter报错:'List' is not a subtype of type 'Map<String, dynamic>' 求助
解决Flutter中'List' is not a subtype of type 'Map<String, dynamic>'错误
这个错误的核心原因是你代码里按Map<String, dynamic>解析数据,但API实际返回的是List类型结构,或是API返回包含List的嵌套Map,但你直接将整体解析成了Map。
第一步:确认API返回的实际结构
先核对你的API返回示例,常见两种情况:
情况A:直接返回数组
[
{"code": "USD", "name": "US Dollar", "rate": 1.0},
{"code": "EUR", "name": "Euro", "rate": 0.92}
]
情况B:返回嵌套了数组的Map
{
"success": true,
"data": [
{"code": "USD", "name": "US Dollar", "rate": 1.0},
{"code": "EUR", "name": "Euro", "rate": 0.92}
]
}
第二步:修改数据解析逻辑
根据API返回结构调整解析代码:
对应情况A的正确写法
如果之前的错误代码是这样:
final response = await http.get(Uri.parse('你的API地址')); if (response.statusCode == 200) { // 错误:把List当成Map解析 Map<String, dynamic> data = json.decode(response.body); Currency currency = Currency.fromJson(data); }
改成List解析逻辑:
final response = await http.get(Uri.parse('你的API地址')); if (response.statusCode == 200) { // 先转成List<dynamic> List<dynamic> dataList = json.decode(response.body); // 遍历数组,将每个Map转成Currency对象 List<Currency> currencies = dataList .map((item) => Currency.fromJson(item as Map<String, dynamic>)) .toList(); // 后续使用currencies列表即可 }
对应情况B的正确写法
先取出嵌套的List字段再解析:
final response = await http.get(Uri.parse('你的API地址')); if (response.statusCode == 200) { // 先解析外层Map Map<String, dynamic> responseMap = json.decode(response.body); // 取出里面的data数组 List<dynamic> dataList = responseMap['data']; // 转成Currency列表 List<Currency> currencies = dataList .map((item) => Currency.fromJson(item as Map<String, dynamic>)) .toList(); }
第三步:确保模型类的fromJson方法正确
你的Currency模型类应该是处理单个Map<String, dynamic>的,示例如下:
class Currency { final String code; final String name; final double rate; Currency({required this.code, required this.name, required this.rate}); // 从单个Map解析成Currency对象 factory Currency.fromJson(Map<String, dynamic> json) { return Currency( code: json['code'] ?? '', name: json['name'] ?? '', rate: (json['rate'] as num).toDouble(), ); } }
关键注意点
- 必须严格匹配API返回结构,不要想当然假设是Map还是List
- 可以先打印
json.decode(response.body)的结果,直观确认数据结构 - 做类型转换时建议加空判断或异常捕获,避免崩溃
内容的提问来源于stack exchange,提问作者Pooyanha
相关产品推荐
相关产品推荐

