可以从Firestore快照Flutter获取元数据吗?

时间:2019-03-06 11:06:12

标签: firebase dart google-cloud-platform flutter google-cloud-firestore

我需要获取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中做到这一点吗?有可能吗?

我尝试了很长时间,但是找不到方法。。帮助!

谢谢!

2 个答案:

答案 0 :(得分:0)

DocumentSnapshot class in FlutterFire似乎没有公开基础文档的元数据。我要在Flutter repo上提出功能请求。

答案 1 :(得分:0)

添加了includeMetadataChanges参数

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访问元数据。