FLUTTER,FIRESTORE:我有一个流构建器,它从集合中的所有文档中返回某个字段..如何添加查询?

Posted

技术标签:

【中文标题】FLUTTER,FIRESTORE:我有一个流构建器,它从集合中的所有文档中返回某个字段..如何添加查询?【英文标题】:FLUTTER, FIRESTORE : I have a streambuilder that returns a certain field from all the documents in the collection..how do I add query? 【发布时间】:2021-08-06 10:19:13 【问题描述】:

我有一个名为 todo 的集合,todo 中的每个文档都包含以下字段:task、boolean isDone、user_id 和 task_id。我的应用程序中的每个用户都有一个 ID,所以我只想检索他们的 ID 的任务。我有从所有文档中检索任务字段的代码,但我想查询集合,以便我只检索 user_id=docid..docid 是我知道的变量的任务。

body: StreamBuilder(
          stream: FirebaseFirestore.instance.collection('todo').snapshots(),
          builder: (context, snapshot) 
            return ListView.builder(
                itemCount: snapshot.data.docs.length,
                itemBuilder: (context, index) 
                  DocumentSnapshot course = snapshot.data.docs[index];
                  return ListTile(title: Text(course['task']));
                );
          ,
        )

所以我需要帮助添加一个查询。我认为我不能再使用索引了,虽然我不确定。 我是 Flutter 和 Firestore 的新手,所以所有 Streambuiler 和 Futurebuilder 的东西还没有点击。如果那里也有任何易于理解的参考资料,请 lmk。

【问题讨论】:

【参考方案1】:

您可以按照documentation 中的说明使用任何query,只需将其添加到您的StreamBuilder,如下所示:

body: StreamBuilder(
          stream: FirebaseFirestore.instance.collection('todo').orderBy('timestamp')
  .limitToLast(2).snapshots(),
          builder: (context, snapshot) 
            return ListView.builder(
                itemCount: snapshot.data.docs.length,
                itemBuilder: (context, index) 
                  DocumentSnapshot course = snapshot.data.docs[index];
                  return ListTile(title: Text(course['task']));
                );
          ,
        )

您还可以使用where 和所有其他查询。 StreamBuilder 基本上只是一个语法助手,可以帮助您在使用实时流时避免使用状态。如果您没有它,则需要在您的 Widget 的 init 覆盖中初始化流,并在每次流更改时更改局部变量的状态。使用StreamBuilder,您可以避免这种情况并获得更清晰的代码。如果您不想,也不需要将无状态小部件转换为有状态小部件。

您在stream 参数中使用的firestore query 与decumentation 中的完全相同,因此无论您是单独使用它还是在StreamBuilder 中使用它,您都可以关注它。

【讨论】:

【参考方案2】:

您可以像这样添加查询。

stream: FirebaseFirestore.instance
            .collection('todo')
            .where('user_id', isEqualTo: docid)
            .snapshots(),

【讨论】:

以上是关于FLUTTER,FIRESTORE:我有一个流构建器,它从集合中的所有文档中返回某个字段..如何添加查询?的主要内容,如果未能解决你的问题,请参考以下文章

Flutter StreamBuilder 与 Firestore 分页

Flutter:Firebase 身份验证和 Firestore 快照流

Flutter:Streambuilder - 关闭流

Flutter 将两个 Firestore 流合并为一个流

Flutter Streambuilder 不断重建

Flutter / Dart中Firestore流的随机/随机顺序?