为什么使用Flutter HTTP包时报错'String不是Map<String, dynamic>子类型'
问题根因
你遇到的类型报错和当前编写的post请求代码无关,错误出在后续处理接口返回数据的步骤。http.post的body参数本身支持传入String、List<int>、Map<String, String>三种类型,你传入jsonEncode处理后的JSON字符串完全符合传参要求,不会在发请求阶段抛出该错误。
解决方案
- 优先检查响应处理逻辑:大概率是你直接将
res.body赋值给了Map<String, dynamic>类型的变量,或是直接对res.body执行了Map类型的操作(比如res.body['data'])。正确的处理方式是先对返回的字符串做JSON解码:
// 先解码响应内容再操作 Map<String, dynamic> resData = jsonDecode(res.body); // 后续按需读取对应字段 print(resData['msg']);
- 如果响应处理逻辑没有问题,排查项目中是否封装过自定义的http.post方法,若封装方法强制要求body参数为
Map<String, dynamic>类型,也会触发该报错。这种情况要么修改封装方法的参数类型支持传入String,要么按照封装规则调整入参格式即可。
内容的提问来源于stack exchange,提问作者Lee Maan
相关产品推荐
相关产品推荐

