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
相关产品推荐
相关产品推荐

