查询 2 streamBuilder 中的特定文档
Posted
技术标签:
【中文标题】查询 2 streamBuilder 中的特定文档【英文标题】:Query a specific document inside 2 streamBuilder 【发布时间】:2021-12-06 09:02:30 【问题描述】:我创建了 2 个不同的集合(用户和关注)。
现在我想:
根据 id 获取存在于关注 collection("list")
中的文档。
在currentUid = doc.id
的第一个集合中获取用户数据(用于第二个集合)。
在ListTile
中显示数据。
第一次收藏
await FirebaseFirestore.instance.collection("users").doc(currentUid).set("name":username,"photoUrl":url,"uid":currentUid);
第二次收集
await FirebaseFirestore.instance.collection("follow").doc(currentUid).collection("list").doc(otherId);
我用过这个,但它不能正常工作
body:StreamBuilder<QuerySnapshot>(
stream: FirebaseFirestore.instance
.collection("follow")
.doc(user!.uid)
.collection("list")
.snapshots(),
builder: (context, snapshot1)
if (!snapshot1.hasData)
return Container();
else
return StreamBuilder<QuerySnapshot>(
stream: FirebaseFirestore.instance
.collection("users")
.where("uid",
isEqualTo:
snapshot1.data!.docs.map((e) => e.id).toList())
.snapshots(),
builder: (context, snapshot2)
if (!snapshot2.hasData)
return Container();
else
return ListView(
children: snapshot2.data!.docs.map((e)
return ListTile(
leading: CircleAvatar(
backgroundImage: NetworkImage(e.get('url')),
radius: 30,
),
title: Text(e.get('username')),
);
).toList(),
);
,
);
【问题讨论】:
【参考方案1】:您应该使用in query 而不是equal to
查询。
in 查询返回给定字段匹配任何 比较值。
cloud_firestore 中 in
查询的语法如下:
.where(field, whereIn: listOfFields)
解决方案:
改变这个:
.where("uid", isEqualTo: snapshot1.data!.docs.map((e) => e.id).toList())
到这里:
.where("uid", whereIn: snapshot1.data!.docs.map((e) => e.id).toList())
【讨论】:
以上是关于查询 2 streamBuilder 中的特定文档的主要内容,如果未能解决你的问题,请参考以下文章
Flutter:使用 Streambuilder<QuerySnapshot> 时如何在 firestore 中获取特定文档
无法从 StreamBuilder (Flutter) 查询子集合
如何在streambuilder中查询firestore文档并更新listview
使用 StreamBuilder 和从 Firebase Firestore 数据库查询时,ListView 不会更新/获取数据