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

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;
}

修正说明

  1. 移除.entries.map((e) => {e.key: e.value}).toList():fold方法已经帮你把数组按日期分组,生成了{日期: [事件列表]}的Map结构,不需要再做额外转换
  2. 给fold指定泛型<Map<String, List>>:明确初始值和返回值的类型,避免隐式类型转换带来的警告或错误
  3. 去掉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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.19 00:35:28