公司的FireStore检索个别更新查询使用飞镖后
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了公司的FireStore检索个别更新查询使用飞镖后相关的知识,希望对你有一定的参考价值。
我还在学习飞镖/扑动,所以我有一个概念上的问题。如果我运行一个查询,返回5号文件给我,我怎么可以设置更新监听器为每个文件,这样,当一个更新我不必重新运行查询并重新获取所有5?基本上,我想单独的更新和不群更新时,只有一个真正被改变。
这里是我的监听更新,但浪费了很多公司的FireStore的读取当前查询的代码。
Firestore.instance
.collection("lists")
.where("users", arrayContains: uid)
.snapshots()
.listen((data) =>
lists = Map.fromEntries(data.documents.map((DocumentSnapshot doc) {
return MapEntry(doc.documentID, TaskList.fromSnapshot(doc));
})));
答案
只有更新的文档通常会从服务器重新读取。通常会从本地缓存中读取的其他(非更新)文件。
另一答案
从this answer,我们可以了解到,调用.snapshots()
返回Stream
对象,而这正是我们想要。这将有可能从查询,集合引用和文件引用。您将需要更高版本。
首先,保存在模型本身的每个文档的参考,将其添加到构造函数,以及让您可以创建从DocumentSnapshot
的对象,像这样的时候总是把它传递:
import 'package:cloud_firestore/cloud_firestore.dart';
class TaskList {
/* attributes */
DocumentReference reference; //Add this
// If you followed the default firebase guide, you'll have the following methods.
// Add the reference to your constructors
TaskList.fromMap(Map<String, dynamic> map, {this.reference}) //add this reference
: //normal attribute initializations;
TaskList.fromSnapshot(DocumentSnapshot snapshot)
: this.fromMap(snapshot.data, reference: snapshot.reference); //add this reference as well
...
}
现在,对于每个文档,您将使用参考属性,得到的快照,并听取该流:
TaskList taskList = TaskList.fromSnapshot(doc); //normal initialization
taskList.reference.snapshots().listen((updatedDoc){ //listen to the stream
print("Document was updated:");
print(updatedDoc.data);
// notice that this will return the first time with the object itself
// which can be resource consuming
});
return MapEntry(doc.documentID, taskList);
以上是关于公司的FireStore检索个别更新查询使用飞镖后的主要内容,如果未能解决你的问题,请参考以下文章
Flutter 使用 Stream 检索 Firestore 集合
如何在streambuilder中查询firestore文档并更新listview
使用 StreamBuilder 和从 Firebase Firestore 数据库查询时,ListView 不会更新/获取数据