Flutter:从Firebase中的两个集合中获取数据
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Flutter:从Firebase中的两个集合中获取数据相关的知识,希望对你有一定的参考价值。
我正在尝试显示具有Firebase集合中发生的事件的ListView,其中包含对另一个集合的引用,但是我无法获取它来完整返回信息。有没有办法引用第二个集合并返回完整数据?
我已经尝试过这种方式,但是没有用
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();
}
答案
该字段的正确值应该是完整的文档路径。 您的情况是:
places/socialClub
然后您应该能够从事件对象访问位置快照,如下所示:
data['place'].get();
有关详细信息:https://firebase.google.com/docs/reference/js/firebase.database.Reference
另一答案
尽管您可以Collection group queries从子集合中获取数据。一些用于了解集合组查询以及如何定义架构的资源
Understanding collection group queries
以上是关于Flutter:从Firebase中的两个集合中获取数据的主要内容,如果未能解决你的问题,请参考以下文章
如何使用 Flutter 从 Firebase 获取当前活跃用户?