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

为什么使用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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.29 14:09:03