Флаттер, Внутри streambuilder, как получить поток, основанный на будущем?

# #firebase #flutter #dart #google-cloud-firestore

Вопрос:

Мне нужна колонка сообщений из моей коллекции firebase, основанная на тегах, которые превышают определенное значение. Поскольку мои значения вложены в отдельную коллекцию и документ, мне нужно дождаться будущего, прежде чем возвращать свой поток.


Сообщения[коллекция] -> сообщение[документ] ->> теги[коллекция]->>>тег[документ] ->>>> значение[поле]


Код на самом деле вообще не работает, но я пытаюсь сделать что-то вроде этого:

 StreamBuilder(

              stream:

              FirebaseFirestore.instance.collection("posts").snapshots().where((post) {

                return FirebaseFirestore.instance.collection("posts")
        .doc(post.id).collection("tags").doc("favorites")["value"] > 5;

               
              }
          ),

builder: (context, AsyncSnapshot<QuerySnapshot> snapshot) {

    return Column(children: snapshot.map((e) => PostCard(post: e)).toList());

}
 

Ответ №1:

Я бы посоветовал вам создать новый collection "tags"

И транслируйте эту коллекцию..

     return StreamBuilder<QuerySnapshot<Map<String, dynamic>>>(
      stream: FirebaseFirestore.instance.collection("tags").where('favorites', isGreaterThan: 5).snapshots(),
      builder: (context, snapshot) {
        if (snapshot.connectionState == ConnectionState.waiting) return Center(child: CircularProgressIndicator());
        return Column(children: snapshot.data.docs.map((e) => PostCard(post: e)).toList());
      },
    );