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

Flutter中如何解析并获取Map<String, List>类型的mySelectedEvents数据?

Flutter解析Map<String, List>类型数据的方法

1. 直接使用原始数据

你给出的mySelectedEvents本身就是Dart原生支持的Map结构,直接声明对应类型后就能直接使用:

Map<String, List<Map<String, String>>> 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"}
  ]
};

获取指定日期的事件,或者遍历数据都很直接:

// 获取2022-09-13的所有事件,空值时返回空列表避免报错
List<Map<String, String>> eventsOn13th = mySelectedEvents["2022-09-13"] ?? [];

// 遍历该日期的事件
for (var event in eventsOn13th) {
  print("标题:${event['eventTitle']},描述:${event['eventDescp']}");
}

2. 类型安全优化:创建实体类

如果想避免Map键名拼写错误,让代码更规范,建议创建Event实体类来封装数据:

class Event {
  final String eventTitle;
  final String eventDescp;

  Event({required this.eventTitle, required this.eventDescp});

  // 从Map转换为Event对象的工厂方法
  factory Event.fromMap(Map<String, dynamic> map) {
    return Event(
      eventTitle: map['eventTitle'] ?? '',
      eventDescp: map['eventDescp'] ?? '',
    );
  }
}

接着把原始的Map数据转换成带实体类的Map:

Map<String, List<Event>> typedEvents = {};
mySelectedEvents.forEach((date, eventMaps) {
  typedEvents[date] = eventMaps.map((map) => Event.fromMap(map)).toList();
});

之后访问数据时,就能通过实体类的属性直接调用,不用再写字符串键名:

List<Event> eventsOn20th = typedEvents["2022-09-20"] ?? [];
for (var event in eventsOn20th) {
  print("标题:${event.eventTitle},描述:${event.eventDescp}");
}

3. 遍历所有日期的事件

如果需要遍历整个Map的所有数据,两种方式都可以实现:

遍历原始Map

mySelectedEvents.forEach((date, events) {
  print("=== 日期:$date ===");
  for (var event in events) {
    print("- 标题:${event['eventTitle']},描述:${event['eventDescp']}");
  }
});

遍历带实体类的Map

typedEvents.forEach((date, events) {
  print("=== 日期:$date ===");
  for (var event in events) {
    print("- 标题:${event.eventTitle},描述:${event.eventDescp}");
  }
});

内容的提问来源于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 18:50:32