我创建了此流,该流获取特定文档的快照。在文档内部有一个名为tripAttractions的数组,我想将其构建到列表中。问题是,如何从快照访问此特定阵列?
Stream<QuerySnapshot> getAttractions(BuildContext context) async* {
Firestore.instance
.collection('trips')
.document(documentId)
.snapshots(includeMetadataChanges: true);
}
该列表显示了我如何尝试访问快照tripAttractions数据,但这不起作用。
ListView.builder(
itemCount: snapshot.data['tripAttractions'].length,
itemBuilder: (BuildContext context, int index) =>
tripAttractionsCards(
context, index, snapshot.data['tripAttractions']),
);
答案 0 :(得分:1)
很可能您只是在项目生成器中缺少数组访问器:
ListView.builder(
itemCount: snapshot.data['tripAttractions'].length,
itemBuilder: (BuildContext context, int index) =>
tripAttractionsCards(
context, index, snapshot.data['tripAttractions'][index]),
);
答案 1 :(得分:0)
好的,问题在于错误地调用了 QuerySnapshot 。我应该使用 DocumentSnapshot ,因为我直接调用文档。另外,我还必须添加 yield * 以从Firestore返回数据。
Stream<DocumentSnapshot> getAttractions(BuildContext context) async* {
yield* Firestore.instance
.collection('trips')
.document(documentId)
.snapshots(includeMetadataChanges: true);
}
我能够通过在streamBuilder中添加if语句来检查快照是否正在发送任何数据来解决此问题。
if (!snapshot.hasData) return Text("Loading");