【发布时间】:2021-08-11 05:50:30
【问题描述】:
我需要为我的应用使用地图。此地图的内容位于云中。我有从 FireStore 获取特定节点并将其存储在 Map 中的方法,之后我需要在 kEvents 中将此映射用作 Map<DateTime,dynamic>,如代码所示。我该怎么做?
完整代码:
class Event {
final String title;
const Event(this.title);
@override
String toString() => title;
}
Map<DateTime, dynamic> testMap = {};
Future<Map<DateTime, dynamic>> getEventsList() async {
var data = await FirebaseFirestore.instance.collection('events').get();
for (int i = 0; i < data.docs.length; i++) {
var time = (data.docs[i]['date'] as Timestamp).toDate();
var title = Event(data.docs[i]['title']);
testMap[time] = title;
}
print(testMap);
return testMap;
}
Map<DateTime, dynamic> eventMap = getEventsList();
final kEvents = LinkedHashMap(
equals: isSameDay,
hashCode: getHashCode,
)..addAll(eventMap); // Use Map here
int getHashCode(DateTime key) {
return key.day * 1000000 + key.month * 10000 + key.year;
}
final kToday = DateTime.now();
final kFirstDay = DateTime(kToday.year, kToday.month - 1, kToday.day);
final kLastDay = DateTime(kToday.year, kToday.month + 1, kToday.day);
【问题讨论】:
-
把
await放在getEventsList()前面。您正在使用未来的功能。 -
如果某个方法是
async,它总是返回一个Future,所以你的getEventsList应该声明为:Future<Map<DateTime, dynamic>> getEventsList() async { ...
标签: flutter dart google-cloud-firestore