更新http库后JSON转换报错:List<dynamic>无法转为String
解决JSON解析类型不匹配错误:type 'List' is not a subtype of type 'String'
错误原因
你的代码存在明确的类型不匹配问题:
getRates方法中,jsonDecode(response.body)已将响应体字符串解析为List<dynamic>类型对象- 但你将这个对象传给了要求接收
String类型参数的allRates方法,直接触发类型转换报错
修复方案
方案一:修改allRates适配已解析的JSON数据(推荐)
既然getRates已经完成JSON解析,allRates无需再接收字符串重复解析,直接处理解析后的List<dynamic>即可:
List<Ratemodel> allRates(List<dynamic> jsonData) { return List<Ratemodel>.from(jsonData.map((x) => Ratemodel.fromJson(x))); }
getRates中的调用保持不变:
return allRates(jsonDecode(response.body));
方案二:调整getRates的调用逻辑
如果不想修改allRates的参数定义,直接将未解析的响应体原始字符串传给它:
Future<List<Ratemodel>> getRates(String id) async { final response = await http.get(Uri.parse(ApiConstants.baseUrl + ApiConstants.rate + id)); if (response.statusCode == 200) { return allRates(response.body); // 直接传递原始字符串,不提前解析 } else { throw Exception('Failed to load album'); } }
说明
方案一更高效,避免了重复执行JSON解析操作,也更符合职责划分:getRates负责网络请求与初步解析,allRates专注于模型转换。
内容的提问来源于stack exchange,提问作者Artin Yunesi
相关产品推荐
相关产品推荐

