Flutter调用REST API GET请求报错期望List却得到_JsonMap如何解决
问题原因
你代码的错误出在接口请求service的类型强转逻辑:后端返回的分页接口响应不是直接的Unit数组,而是包含分页信息、响应状态、数据列表的JSON对象(也就是报错里提到的_JsonMap类型),但你直接把解码后的结果强制转换为List类型,因此触发类型不匹配报错。
解决步骤
- 先打印接口返回的原始响应内容确认结构
把你service代码中注释掉的print(response.body);打开,运行接口请求后查看控制台输出的JSON结构,确认存放Unit列表的字段名称,常见的字段名有data、list、records、rows等。
举个常见的分页接口响应结构示例:
{ "code": 200, "message": "请求成功", "page": 1, "total": 50, "data": [ {"id": "1", "name": "千克", "baseUnit": "g", "baseValue": 1000}, // 其余Unit数据... ] }
- 修改service代码的解析逻辑
先将响应解码为Map类型,再取出存放列表的字段做后续转换即可,修改后的代码示例如下(请将示例中的data字段替换为你接口实际的列表字段名):
Future < List < Unit >> search(searchText, page) async { var searchUrl = "${ApiEndPoint.baseUrl}/unit?q=$searchText&page=$page"; var response = await http.get( Uri.parse(searchUrl), headers: { "Content-Type": "application/json" }, ); // 先解析为Map类型 final responseJson = convert.json.decode(response.body) as Map<String, dynamic>; // 取出存放列表的字段转换为List final units = responseJson['data'] as List; final List<Unit> unitList = units.map((item) => Unit.fromJson(item)).toList(); return unitList; }
可选优化
可以增加判空逻辑,避免接口返回列表字段为空时触发异常:
final units = responseJson['data'] as List? ?? [];
内容的提问来源于stack exchange,提问作者Emmon
相关产品推荐
相关产品推荐

