Код моментального снимка внутри StreamBuilder не выполняется при получении данных из Firebase FireCloud во Flutter

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

StreamBuilder(
              stream: FirebaseFirestore.instance.collection('humansOfLpc').snapshots(),
              builder: (BuildContext context,snapshot){
                if(!snapshot.hasData){
                  return Center(
                    child: Text('Loading...'),
                  );
                }
                print('outside title and desc widget');
                List<TitleAndDescription> titleAndDescriptions=[
                ];
                snapshot.data.docs.map((document){
                    final about = document.data()["about"];
                    final aftercampusProgress =document.data()["afterCampusPlacement"];
                    final incampusPlacement = document.data()["incampusProgress"];
                    print('inside snapshots');
                    print(about);
                    final aboutDesc = TitleAndDescription(
                      title: 'About',
                      description: about,
                    );
                    final incampusProgressDesc = TitleAndDescription(
                      title: 'In-Campus Progress',
                      description: incampusProgress,
                    );
                    final afterCampusPlacementDesc=TitleAndDescription(
                      title: 'After Campus Placements',
                      description: afterCampusPlacement,
                    );
                    titleAndDescriptions.add(aboutDesc);
                    titleAndDescriptions.add(incampusProgressDesc);
                    titleAndDescriptions.add(afterCampusPlacementDesc);

                });

                return Expanded(
                  child: ListView(
                    children: titleAndDescriptions,
                  ),
                );

              },
            ),

Основная проблема, с которой я столкнулся, заключается в том, что он не читает следующий код:

snapshot.data.docs.map((document){
                    final about = document.data()["about"];
                    final aftercampusProgress =document.data()["afterCampusPlacement"];
                    final incampusPlacement = document.data()["incampusProgress"];
                    print('inside snapshots');
                    print(about);
                    final aboutDesc = TitleAndDescription(
                      title: 'About',
                      description: about,
                    );
                    final incampusProgressDesc = TitleAndDescription(
                      title: 'In-Campus Progress',
                      description: incampusProgress,
                    );
                    final afterCampusPlacementDesc=TitleAndDescription(
                      title: 'After Campus Placements',
                      description: afterCampusPlacement,
                    );
                    titleAndDescriptions.add(aboutDesc);
                    titleAndDescriptions.add(incampusProgressDesc);
                    titleAndDescriptions.add(afterCampusPlacementDesc);

                });

Я могу сказать это, поскольку консоль печатает 'outside title and desc widget', но не печатает 'inside snapshots'.
Из-за этого мой список titleAndDescriptions пуст, и я не получаю 3 виджета, а также данные в моем пользовательском интерфейсе. Пожалуйста, скажите, что я делаю не так и какая альтернатива у меня есть? Заранее спасибо.


person Asim Junaid    schedule 04.09.2020    source источник


Ответы (1)


Используйте forEach вместо map

snapshot.data.docs.forEach((document){
                    final about = document.data()["about"];
                    final aftercampusProgress =document.data()["afterCampusPlacement"];
                    final incampusPlacement = document.data()["incampusProgress"];
                    print('inside snapshots');
                    print(about);
                    final aboutDesc = TitleAndDescription(
                      title: 'About',
                      description: about,
                    );
                    final incampusProgressDesc = TitleAndDescription(
                      title: 'In-Campus Progress',
                      description: incampusProgress,
                    );
                    final afterCampusPlacementDesc=TitleAndDescription(
                      title: 'After Campus Placements',
                      description: afterCampusPlacement,
                    );
                    titleAndDescriptions.add(aboutDesc);
                    titleAndDescriptions.add(incampusProgressDesc);
                    titleAndDescriptions.add(afterCampusPlacementDesc);

                });

См. Почему карта не работает, а forEach работает здесь.

person Josteve    schedule 04.09.2020