Flutter报错:参数类型'String'无法赋值给'Iterable<Map<dynamic,dynamic>>'
错误解决:String 无法赋值给 Iterable<Map<dynamic, dynamic>>
错误信息
The argument type 'String' can't be assigned to the parameter type 'Iterable<Map<dynamic, dynamic>>'
问题代码
loadPreviousEvents() async { var url = 'http://xxxxxxxxxx/getEvents.php'; var res = await http.get(Uri.parse(url)); var response = res.body; var newMap = groupBy(response, (Map oj) => oj['date']); }
问题原因
res.body 返回的是JSON格式的字符串,而 groupBy 函数要求第一个参数是 Iterable<Map<dynamic, dynamic>> 类型(即可迭代的Map集合),直接传入字符串会导致类型不匹配,触发报错。
解决方法
先将JSON字符串解析为 List<Map<dynamic, dynamic>> 类型,再传入 groupBy 函数:
import 'dart:convert'; // 必须导入JSON解析库 loadPreviousEvents() async { var url = 'http://xxxxxxxxxx/getEvents.php'; var res = await http.get(Uri.parse(url)); // 把JSON字符串解析为List<Map>结构 List<Map<dynamic, dynamic>> responseData = jsonDecode(res.body); // 传入解析后的List执行分组操作 var newMap = groupBy(responseData, (Map oj) => oj['date']); }
注意:如果接口返回的JSON外层不是数组(比如是单个对象),需要根据实际返回结构调整解析逻辑,但获取事件列表的接口通常会返回数组格式的JSON。
内容的提问来源于stack exchange,提问作者msi
相关产品推荐
相关产品推荐

