我要显示具有此条件的组
- 当前用户ID必须包含在组集合的成员数组中
- 按上次更新(时间)排序
所以我用这样的蒸汽
StreamBuilder(
stream: FirebaseFirestore.instance
.collection("groups")
.orderBy('LastUpdate', descending: true)
.where(
"members",
isEqualTo: FirebaseAuth.instance.currentUser!.uid,
)
.snapshots(),
builder: (context, AsyncSnapshot snapshot) {
if (snapshot.hasError) {
return Text(
'${snapshot.error}',
style: const TextStyle(color: Colors.white),
);
}
if (snapshot.hasData) {
return Padding(
padding: const EdgeInsets.only(top: 5),
child: ListView.builder(
itemCount: snapshot.data.docs.length,
itemBuilder: (context, index) {
return Text(
snapshot.data.docs[index]['groupName'],
style: const TextStyle(fontSize: 40, color: Colors.white),
);
},
),
);
} else {
return const Center(
child: CircularProgressIndicator(color: Colors.white),
);
}
});
当我第一次运行时,它显示错误并说,
FAILED_PRECONDITION: The query requires an index. You can create it here: ...
我创建了它。有它的图片,x1c 0d1x
有了这个,应用程序运行没有错误。但是,
- 当我使用
.where( "members",isEqualTo: FirebaseAuth.instance.currentUser!.uid,)
,它不显示任何东西。空没有任何错误。(有3个组,这个用户ID在成员的数组中-它肯定。我检查它正确) - 当我从快照中删除
.where( "members",isEqualTo: FirebaseAuth.instance.currentUser!.uid,)
时。它工作正常。
我能做些什么来解决这个问题。帮助
1条答案
按热度按时间ac1kyiln1#
如果members是文档中的数组,则必须使用“arrayContains”而不是“isEqualTo”