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
相关产品推荐
相关产品推荐

