我需要获取snapshot
元数据,以便可以检查是否成功写入Firestore。我看着source,看到有SnapshotMetadata
和布尔值hasPendingWrites()
。但是我找不到实现方法。没有开源的dart项目使用过它。
Firebase doc可以使用:.onSnapshot
/ .addSnapshotListener
指定includeMetadataChanges: true
。
但是我需要确保在查询QuerySnapshot
时得到元数据。我将query
用于stream
,而不是addSnapshotListener
。
赞:
child: new FirestoreAnimatedList(
query: Firestore.instance.collection('Collection')
.orderBy('timestamp', descending: true)
.snapshots(),
padding: new EdgeInsets.all(8.0),
reverse: true,
itemBuilder: (_, DocumentSnapshot snapshot,
Animation<double> animation, int x) {
return new Chat(
snapshot: snapshot, animation: animation);
},
),
我尝试指定:
query: Firestore.instance.collection('Collection')
.snapshots(includeMetadataChanges: true),
但这是不可能的:
错误:未定义命名参数'includeMetadataChanges'。
我也尝试:
snapshot.getMetadata().hasPendingWrites()
但是要给出错误:
错误:未为该类定义方法'getMetaData' “ DocumentSnapshot”。
有人知道如何在Flutter中做到这一点吗?有可能吗?
我尝试了很长时间,但是找不到方法。。帮助!
谢谢!
答案 0 :(得分:0)
DocumentSnapshot
class in FlutterFire似乎没有公开基础文档的元数据。我要在Flutter repo上提出功能请求。
答案 1 :(得分:0)
在 cloud_firestore 程序包中添加了对includeMetadataChanges
参数的Flutter支持,版本为 0.12.9 。
现在,当您调用snapshots()
函数时,可以将其作为参数添加。
此示例返回一个集合中所有文档的流,作为联系人列表。如果includeMetadataChanges
为 false (默认行为),则当元数据更改(例如 hasPendingWrites 或 isFromCache )时,流将不会更新。 。如果 true ,则通过这些更改更新流。
Stream<List<Contact>> getAllContactsStream() {
return Firestore.instance.collection('contacts')
.orderBy('name', descending: false)
.snapshots(includeMetadataChanges: true)
.map((snapshot) => snapshot.documents.map((document) => Contact.fromFirestore(document)).toList())
}
对于单个文档快照,可以使用document.data
访问常规的Firestore数据。通过document.metadata
访问元数据。