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

Flutter POST请求报错:_InternalLinkedHashMap类型不匹配问题求助

问题排查与解决

错误原因

你遇到的TypeError根源是错误使用了JsonDecoder:

  • JsonDecoder的构造函数需要传入可选的reviver函数(类型为((Object?, Object?) => Object?)?),但你直接传入了Map(_InternalLinkedHashMap<String, String>),类型完全不匹配,触发类型转换错误。
  • 你的userData已经是Map类型,JsonDecoder的作用是把JSON字符串解码为Dart对象,而你当前需要的是把Dart Map转换为适合POST请求的格式,完全用反了工具。

解决方案

根据后端接口的接收格式,选择以下两种处理方式:

方式1:后端接收JSON格式请求体

如果后端要求请求体是JSON字符串,使用json.encode()将Map转为JSON字符串:

import 'dart:convert'; // 必须导入该库

class PostController extends GetxController {
  final String url = ProjectApis.requestUrl;
  ProjectApis _projectApis = ProjectApis();

  Client _client = Client();

  postRequest(userData, url) async {
    var response = await _client.post( // 注意是小写post,不是大写Post
      Uri.parse(url),
      body: json.encode(userData), // 替换JsonDecoder(userData)为json.encode(userData)
      headers: {
        ..._projectApis.headers,
        'Content-Type': 'application/json', // 必须添加该头,告知后端请求体为JSON格式
      },
    );
    return response;
  }
}

方式2:后端接收form-urlencoded格式请求体

如果后端要求表单格式(application/x-www-form-urlencoded),直接传入userData即可,http客户端会自动处理编码:

class PostController extends GetxController {
  final String url = ProjectApis.requestUrl;
  ProjectApis _projectApis = ProjectApis();

  Client _client = Client();

  postRequest(userData, url) async {
    var response = await _client.post( // 修正为小写post
      Uri.parse(url),
      body: userData, // 直接传入Map,无需额外转换
      headers: _projectApis.headers,
    );
    return response;
  }
}

额外修正点

原代码中_client.Post的P为大写,Dart http库的方法是小写的post,必须修正,否则会触发方法不存在的错误。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.24 05:27:32