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

Firestore数据转flutter_calendar_carousel的EventList时出现类型错误

错误原因

你的testdata方法声明的返回值类型是EventList<Event>,但代码中通过snapshot.docs.map(...).toList()最终返回的是List<EventList<Event>>类型的列表,类型不匹配所以抛出编译错误。
同时flutter_calendar_carousel要求的markedDatesMap参数本身就是单个EventList实例,内部的events属性存储所有日期对应的事件集合,你不需要为每个Firestore文档单独生成一个EventList。

修正代码

EventList<Event> testdata(QuerySnapshot snapshot) {
  Map<DateTime, List<Event>> eventsMap = {};
  // 遍历所有Firestore文档,把所有事件整合到同一个Map中
  for (var doc in snapshot.docs) {
    // 类型转换:如果Firestore中date字段是Timestamp类型,调用toDate()转换
    DateTime eventDate = (doc['date'] as Timestamp).toDate();
    // 如果是字符串格式的日期,改用下面的写法
    // DateTime eventDate = DateTime.parse(doc['date']);

    // 初始化对应日期的事件列表
    if (!eventsMap.containsKey(eventDate)) {
      eventsMap[eventDate] = [];
    }
    // 添加当前文档的事件
    eventsMap[eventDate]!.add(Event(
      date: eventDate,
      title: doc['name'],
      icon: Icon(
        Icons.block,
        color: Colors.red[200],
        size: 30,
      ),
    ));
  }
  // 返回单个EventList实例,符合类型要求
  return EventList<Event>(events: eventsMap);
}

Stream<EventList<Event>> get caldendardata {
  return events.snapshots().map(testdata);
}

后续使用

修改后拿到的caldendardata流输出的就是符合组件要求的EventList<Event>类型数据,直接赋值给flutter_calendar_carousel的markedDatesMap参数即可正常使用。

内容的提问来源于stack exchange,提问作者vivi

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.16 17:15:07