Streambuilder отображает виджет по умолчанию вместо данных, возвращаемых построителем

У меня есть конструктор потоков, который должен отображать такие контакты. Функция извлекает необходимые данные, как указано функциями печати, однако они не отображаются на экране, почему?

      static Future<Map<String, String>> getUserBasicInfo(String userID) async // How I retrieve basic info
  {
    QuerySnapshot userDatabase = await FirebaseFirestore.instance.collection('users').where('userID', isEqualTo: userID).get();

    final List<DocumentSnapshot> userSnapshot = userDatabase.docs;

    Map<String, String> userInfo = {
      'photoURL' : userSnapshot[0].data()['photoURL'].toString(),
      'username' : userSnapshot[0].data()['username'].toString()
    };

    return userInfo;
  }

Stream<List<ChatUsers>> _getConvos1() async* { // The function called in the builder
 
    List<ChatUsers> retrievedContacts = [];
    print('0');
    Map basicInfo = Map<String, String>();
 
     FirebaseFirestore.instance
        .collection('messages')
        .where('users', arrayContains: FirebaseAuth.instance.currentUser.uid)
        .snapshots()
        .listen((element) {
 
          element.docs.forEach((document) async {
        print(document.data());
        print('1');
        String contactID = (document.data()['senderID'] ==
                FirebaseAuth.instance.currentUser.uid
            ? document.data()['lastMessage']['receiverID']
            : document.data()['lastMessage']['senderID']);
        print("ContactID: " + contactID);
        print('2');
        basicInfo = await UserDatabase.getUserBasicInfo(contactID);
        print("BasicInfo: " + basicInfo.toString());
        print('3');
        String content = document.data()['lastMessage']['content'];
        print('4');
        String time = (new DateTime.fromMillisecondsSinceEpoch(
                int.parse(document.data()['lastMessage']['time']) * 1000))
            .toString();
        print('5');
        Map lastMessageInfo = Map<String, String>();
        lastMessageInfo = {'content': content, 'time': time};
 
        print('6');
        Map<String, String> combinedMap = {...basicInfo, ...lastMessageInfo};
        print('7');
 
        ChatUsers newUser = ChatUsers(
            combinedMap['username'],
            combinedMap['content'],
            combinedMap['photoURL'],
            combinedMap['time']);
        print('8');
 
        print(newUser.userName.toString() +
            " " +
            newUser.userImageURL.toString() +
            " " +
            newUser.messageText.toString() +
            " " +
            newUser.time.toString());
        retrievedContacts.add(newUser);
        print('9');
      });
      print('10');
    });
    print('11');
    yield retrievedContacts;
  }
 
////////////////////////////////////////////////////////////////////////////////////
 
Container(
                child: StreamBuilder(
                    stream: _getConvos1(),
                    builder: (BuildContext context, AsyncSnapshot snapshot) {
                      Widget displayWidget = Container(
 
                      );
                      if (snapshot.hasError) {
                        displayWidget = Container(
                            width: 200,
                            height: 200,
                            child: Text("Error: " + snapshot.error.toString()));
                      } else {
                        if (snapshot.connectionState == ConnectionState.none) {
                          displayWidget = Container(
                              width: 200, height: 200, child: Text("None"));
                        } else if (snapshot.connectionState ==
                            ConnectionState.waiting) {
                          displayWidget = Container(
                            width: MediaQuery.of(context).size.width,
                            height: MediaQuery.of(context).size.height - 250,
                            child: Align(
                                alignment: Alignment.center,
                                child: CircularProgressIndicator(
                                  valueColor:
                                      AlwaysStoppedAnimation(Colors.black),
                                )),
                          );
                        } else if (snapshot.connectionState ==
                            ConnectionState.active) {
                          displayWidget = ListView.builder(
                              itemCount: snapshot.data.length,
                              shrinkWrap: true,
                              padding: EdgeInsets.only(top: 16),
                              physics: NeverScrollableScrollPhysics(),
                              itemBuilder: (context, index) {
                                print("Username: " +
                                    snapshot.data[index].userName);
                                return Conversation(
                                  userName: snapshot.data[index].userName,
                                  messageText: snapshot.data[index].messageText,
                                  userImageURL:
                                      snapshot.data[index].userImageURL,
                                  time: snapshot.data[index].time,
                                  messageRead:
                                      (index == 0 || index == 3) ? true : false,
                                );
                              });
                        }
                      }
                      return displayWidget;
                    })) 

Вместо этого он просто отображает пустой контейнер по умолчанию. В некотором смысле он показывает круговой индикатор на несколько мгновений, после того как функция _getConvos1 загружает необходимые данные - индикатор исчезает и вместо него отображается пустой контейнер, что странно. Когда я удаляю контейнер по умолчанию, появляется сообщение об ошибке, сообщающее, что строитель вернул значение null. Как это выглядит. Может быть, будущее в getUserBasicInfo(String userID) вызывает проблемы?

0 ответов

Другие вопросы по тегам