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

Flutter DropdownSearch对接Firebase API报错:List与Map类型不匹配

问题原因

错误type 'List<dynamic>' is not a subtype of type 'Map<String, dynamic>' in type cast的核心原因是:你在解析Firebase返回的JSON时,错误地将**直接返回的数组(List)**强制转换为了Map类型,然后试图读取'value'字段,但实际上Firebase的tipe.json接口返回的是一个包含Tipe数据的数组,而非嵌套在value字段下的Map结构。

解决方案

修改asyncItems中的JSON解析逻辑,直接将解码后的结果转为List,再遍历生成Tipe模型列表:

asyncItems: (text) async {
  var response = await http.get(Uri.parse("$api/tipe.json"));
  if (response.statusCode != 200) {
    return [];
  }
  // 直接将解码结果转为List<dynamic>,无需转为Map
  List<dynamic> tipeList = json.decode(response.body) as List<dynamic>;
  // 使用map方法更简洁地转换为Tipe列表
  return tipeList.map((element) => Tipe(
        id: element['id'],
        name: element['name'],
      )).toList();
},
额外优化建议
  • 可以利用你已定义的Tipe.fromJson构造函数来简化转换代码,让结构更清晰:
    return tipeList.map((json) => Tipe.fromJson(json)).toList();
    
  • 如果你的Firebase数据库结构确实是将数组嵌套在value字段下(比如返回{"value": [/* 数据 */]}),那需要检查数据库的结构是否正确,或者确认API地址是否有误。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.03 14:30:42