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
相关产品推荐
相关产品推荐

