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

