Flutter中type 'List' is not a subtype of type 'Map<String, List>'错误求助
解决Flutter中
type 'List' is not a subtype of type 'Map<String, List>'错误 你的问题出在fold之后的多余转换步骤:.entries.map((e) => {e.key: e.value}).toList()。这行代码把fold生成的Map<String, List>转换成了List<Map<String, List>>,和mySelectedEvents声明的Map<String, List>类型完全不匹配,所以触发类型错误。
直接去掉这部分转换,同时给fold指定明确的泛型类型,就能得到你想要的结构:
Map<String, List> mySelectedEvents = {}; loadPreviousEvents() async { var url = 'http://xxxxxxxx/getEvents.php'; var res = await http.get(Uri.parse(url)); var response = json.decode(res.body); // 去掉多余的entries.map.toList,直接使用fold的结果 mySelectedEvents = response.fold<Map<String, List>>({}, (previousValue, element) { String date = element['date']; if (!previousValue.containsKey(date)) { previousValue[date] = []; } element.remove('date'); previousValue[date]?.add(element); return previousValue; }); print(mySelectedEvents); return mySelectedEvents; }
修正说明
- 移除
.entries.map((e) => {e.key: e.value}).toList():fold方法已经帮你把数组按日期分组,生成了{日期: [事件列表]}的Map结构,不需要再做额外转换 - 给
fold指定泛型<Map<String, List>>:明确初始值和返回值的类型,避免隐式类型转换带来的警告或错误 - 去掉
Map val = previousValue as Map;:因为指定了泛型,previousValue已经是Map<String, List>类型,无需强制转换
运行修正后的代码,mySelectedEvents就会生成你期望的格式:
{ "2022-09-13": [ {"eventDescp": "11", "eventTitle": "111"}, {"eventDescp": "22", "eventTitle": "22"} ], "2022-09-30": [ {"eventDescp": "22", "eventTitle": "22"} ], "2022-09-20": [ {"eventTitle": "ss", "eventDescp": "ss"} ] }
内容的提问来源于stack exchange,提问作者msi
相关产品推荐
相关产品推荐

