公司的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 集合

应用发布更新后,在公司的FireStore数据的路径

如何在streambuilder中查询firestore文档并更新listview

如何从地图列表中逐列检索飞镖中的数据?

使用 StreamBuilder 和从 Firebase Firestore 数据库查询时,ListView 不会更新/获取数据

使用 Firestore 进行多路径更新