firebase - Flutter:从 Firebase 中的两个集合中获取数据
问题描述
我正在尝试显示一个 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();
}
解决方案
看起来您没有为“事件”文档中的位置字段使用“参考”类型的字段。因此,请确保此字段设置为“引用”并且它包含有效值。
该字段的正确值应该是完整的文档路径。
在您的情况下,这将是:
places/socialClub
然后,您应该能够从事件对象访问地点快照,如下所示:
data['place'].get();
欲了解更多信息:https ://firebase.google.com/docs/reference/js/firebase.database.Reference
推荐阅读
- android - 选择 RecyclerView 的最后一项时如何防止 ScrollView 上移?
- java - 在使用另一个微服务时获得空响应?
- xml - 使用 XmlParser().parseText(xml_file) 从 XML 文件中提取值到 Jenkinsfile 管道
- python - SWIG 生成的 Python 函数注释不起作用
- python-3.x - 使用 setuptools(setup.py) 在主模块之外添加文件夹和子文件夹
- javascript - 加载时我需要显示和获取图像大小
- elasticsearch - Elasticsearch,集群性能比单主机服务器差吗?
- javafx - 类 Circle 中的构造函数 Circle 不能应用于给定类型
- r - 如何使用 R 运行双循环
- amazon-web-services - 如何在 AWS SQS 中查看特定日期收到的消息?(或者今天最后一次收到)