firebase .where()不适用于StreamBuilder蒸汽|Firestore查询需要索引- Flutter

ubof19bj  于 2022-12-19  发布在  Flutter
关注(0)|答案(1)|浏览(119)

我要显示具有此条件的组

  • 当前用户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,)时。它工作正常。

我能做些什么来解决这个问题。帮助

ac1kyiln

ac1kyiln1#

如果members是文档中的数组,则必须使用“arrayContains”而不是“isEqualTo”

.where(
   "members",
   arrayContains: FirebaseAuth.instance.currentUser!.uid,
)

相关问题