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

Flutter中如何修复‘List<dynamic>不是Map<String, dynamic>子类型’HTTP错误?

解决Flutter中http.post触发的_TypeError (type 'List' is not a subtype of type 'Map<String, dynamic>')错误

问题核心

这个错误并非http.post发送请求时直接触发,而是后续解析服务器响应时,把返回的List类型数据当成了Map<String, dynamic>处理。另外还要排查请求参数的合法性。

排查与修复步骤

  • 确认服务器返回格式:检查editdata.php接口的返回内容,如果返回的是JSON数组(比如[{"status": "success"}]),但你解析时强制转成Map,就会触发类型错误。
  • 修正响应解析逻辑:
    补全异步处理和响应解析逻辑,根据实际返回类型做对应处理:
    void editData() async {
      var url = "http://192.168.1.85/dashboard/myFolder/editdata.php";
      // 注意:如果widget.list[widget.index]是List类型,要提取具体id值(比如widget.list[widget.index]['id'])
      // 并转成字符串,确保请求参数是合法的基本类型
      var response = await http.post(Uri.parse(url), body: {
        'id': widget.list[widget.index].toString(),
        'name': cname.text,
        'mobile': cmobile.text,
      });
    
      var responseData = jsonDecode(response.body);
      // 根据返回类型分支处理
      if (responseData is List) {
        // 按数组逻辑处理,比如遍历
        for (var item in responseData) {
          print(item['status']);
        }
      } else if (responseData is Map<String, dynamic>) {
        // 按对象逻辑处理
        print(responseData['status']);
      }
    }
    
  • 检查请求参数合法性:如果widget.list[widget.index]本身是List类型,直接作为id参数传递会导致请求格式异常,服务器可能返回错误格式的响应,进而触发解析错误。此时要提取List中对应的id字段,比如widget.list[widget.index]['id']。

内容的提问来源于stack exchange,提问作者krmecr28

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.20 08:25:01