可以从 Firestore 快照 Flutter 中获取元数据吗?
Posted
技术标签:
【中文标题】可以从 Firestore 快照 Flutter 中获取元数据吗?【英文标题】:Possible to get metadata from Firestore snapshot Flutter? 【发布时间】:2019-07-28 00:43:24 【问题描述】:我需要获取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” '文档快照'。
有谁知道在 Flutter 中如何做到这一点?有可能吗?
我尝试了这么久,但找不到方法..帮助!
谢谢!
【问题讨论】:
【参考方案1】:增加了includeMetadataChanges参数
0.12.9 版本的 cloud_firestore 包中添加了 Flutter 对 includeMetadataChanges
参数的支持。
当您调用 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
访问元数据。
【讨论】:
【参考方案2】:看起来DocumentSnapshot
class in FlutterFire 没有公开底层文档的元数据。我会在Flutter repo 上提交功能请求。
【讨论】:
以上是关于可以从 Firestore 快照 Flutter 中获取元数据吗?的主要内容,如果未能解决你的问题,请参考以下文章
从 Stream 检索快照时,Flutter/Firestore 返回类型 List<Review> 不是“Map<String, dynamic>”类型的子类型
Flutter StreamBuilder中使用的Firestore快照在数据更改时永远不会更新
Flutter:Firebase 身份验证和 Firestore 快照流