【发布时间】:2020-09-07 01:11:48
【问题描述】:
我正在尝试显示一个 ListView,其中包含我在 firebase 集合中拥有的事件,并且其中引用了另一个集合,但我无法让它完整地返回信息。有没有办法引用第二个集合并返回完整数据?
我尝试过这样做,但它不起作用
class Event {
String id;
Timestamp date;
String description;
String name;
String place;
Place placeData;
Event(this.id, this.date, this.description, this.name, this.place);
Event.withPlace(this.id, this.date, this.description, this.name, this.place, this.placeData);
Event.fromFirestore(DocumentSnapshot doc)
: id= doc.documentID,
date = doc.data['date'] ?? '',
description = doc.data['description'] ?? '',
name = doc.data['name'] ?? '',
place = doc.data['place'] ?? '';
}
Stream<List<Event>> getFutureEventsFromFirestore() {
return Firestore.instance.collection('events').orderBy('date', descending: false).snapshots().map(futureEventListWithPlace);
}
List<Event> futureEventList(QuerySnapshot query) {
return query.documents.where((event) => event['date'].toDate().isAfter(DateTime.now())).map((event) => Event.fromFirestore(event)).toList();
}
List<Event> futureEventListWithPlace(QuerySnapshot query) {
return query.documents.where((event) => event['date'].toDate().isAfter(DateTime.now())).map((event) {
final Event eventF = Event.fromFirestore(event);
FirebaseProvider.getPlaceFromFirestore(eventF).then((value){
Event.withPlace(eventF.id, eventF.date, eventF.description, eventF.name, eventF.place, value);
});
}).toList();
}
Future<Place> getPlaceFromFirestore(Event event) async {
DocumentReference documentReference = Firestore.instance.collection("places").document(event.place);
await documentReference.get().then((DocumentSnapshot ds) {
return Place.fromMap(ds.data);
});
}
List<Event> pastEventList(QuerySnapshot query) {
return query.documents.where((event) => event['date'].toDate().isBefore(DateTime.now())).map((event) => Event.fromFirestore(event)).toList();
}
【问题讨论】:
-
Firestore 一次只能查询一个集合。如果您想要来自第二个集合的数据,则必须单独查询它。集合之间没有类似 SQL 的连接。
-
我尝试使用 futureEventListWithPlace 函数,但它不起作用
标签: firebase flutter google-cloud-firestore