FLUTTER,FIRESTORE:我有一个 streambuilder,它 returns 集合中所有文档的某个字段..如何添加查询?

FLUTTER, FIRESTORE : I have a streambuilder that returns a certain field from all the documents in the collection..how do I add query?

我有一个名为 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。

您可以按照 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 与在文档化中使用的完全相同,因此无论您是单独使用它还是在 [=12= 中使用它,您都可以遵循它].

您可以像这样添加查询。

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