Как получить значение потока и затем вызвать другой поток на основе предыдущего значения, используя Flutter с firestore - PullRequest
0 голосов
/ 26 марта 2019

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

Я не знаю, является ли это правильным способом для его разработки, и если да, то как реализовать его с помощью флаттера ... Я пробовал streamBuilder для первого вызова, но я не знаю, как сделать второй потоковый вызов со списком идентификаторов.

Функция, которую я использовал для получения следующих идентификаторов

Stream<QuerySnapshot> followingUsersContent(String uid){
return _firestore.collection("following").document(uid).collection("userFollowing").snapshots();
  }

и для получения своих сообщений:

Stream<DocumentSnapshot> myContentList(String userId) {
    return _firestore.collection("posts").document(userId).collection("userPosts").document().snapshots();
  }

Вот так я получаю первый список идентификаторов из виджета:

postWidget(){
    return Container(
      child: StreamBuilder<QuerySnapshot>(
       stream: usersContentProvider.followingUsersContent(profileId),
            builder: (BuildContext context, AsyncSnapshot<QuerySnapshot> snapshot){
              if (!snapshot.hasData) {
              return Text("There's no data");
            }

            if (snapshot.hasData) {

                 List<DocumentSnapshot> docs = snapshot.data.documents;

                 List<UserFollowing> userInfoList = usersContentProvider.getFollowingsUidToList(docs);

                 return testUserID(userInfoList); 
               }

              },
      ),
    );
  }
Widget testUserID(List<UserFollowing> userInfoList){
    return Container(
      child: Expanded(
        child: ListView.builder(
          itemCount: userInfoList.length,
          itemBuilder: (BuildContext context, i){

            return Text(userInfoList[i].uid ?? "There's no data", style: TextStyle(color: Colors.red),);
          }
        ),
      ),
    );
  }

Пока все хорошо, все хорошо.

Теперь я должен поместить другой построитель потока в listView.Builder () {} "Я не думаю, что это хорошая идея" .. потому что он получает список uid с (контекст itemBuilder, i). Или есть лучший способ вызвать поток со всеми имеющимися у меня идентификаторами. Пс хранятся в модели UserFollowing:

class UserFollowing{
  final String _uid;


   UserFollowing(this._uid);

   String get uid => _uid;
}

и хранится здесь:

List getFollowingsUidToList(List<DocumentSnapshot> docList){
    if (docList != null){
      List<UserFollowing> followingUidsList = [];
      docList.forEach((document){
        String uid = document.data["uid"];

        UserFollowing userPost = UserFollowing(uid);
        followingUidsList.add(userPost);
      });
      return followingUidsList;
    }
  }

Все, что у меня осталось, - это сообщить новый поток с userFollowing.uid.

Как я могу это сделать? спасибо.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...