在飞镖/长笛和学习Firebase Firestore。。。在创建UI之前,我使用以下方法进行测试:
_testFireStore() async {
var result = Firestore.instance
.collection('users')
.where('uid', isEqualTo: 'IvBEiD990Vh0D9t24l2GCCdsrAf1')
.snapshots();
await for (var snapshot in result) {
for (var user in snapshot.documents) {
print('main.DEBUG: ' + user.data.toString());
}
}
}
它按预期工作——print语句最初执行,但随后每次更新Firestore数据库中文档中的任何字段时都会实时执行。
如何更改此代码,使快照只检索一次,而不是"订阅/收听"…这样我们就不会在不需要的数据上浪费带宽,打印语句只执行一次?
Firestore.instance.collection(...).where(...)
返回一个Query对象。它有一个名为getDocuments((的方法,该方法执行查询并为您提供一个带有单个结果集的Future。
var query = Firestore.instance
.collection('users')
.where('uid', isEqualTo: 'IvBEiD990Vh0D9t24l2GCCdsrAf1');
query.getDocuments().then((QuerySnapshot snapshot) {
// handle the results here
})
或者使用await
获取QuerySnapshot,因为getDocumets()
返回Future。
使用getDocuments()
检索所有文档一次:
_testFireStore() async {
var result = await Firestore.instance
.collection('users')
.where('uid', isEqualTo: 'IvBEiD990Vh0D9t24l2GCCdsrAf1')
.getDocuments();
print(result.documents.toString());
}