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 分页