从Flutter中的Firebase FireCloud接收数据时,StreamBuilder中的快照代码未执行

问题描述

我正在尝试从Firecloud数据库获取描述文本,并在3个不同的小部件中使用它们,将这些小部件添加到列表中,然后将该列表传递到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',);
                    titleAndDescriptions.add(aboutDesc);
                    titleAndDescriptions.add(incampusProgressDesc);
                    titleAndDescriptions.add(afterCampusPlacementDesc);

                });

我可以这样说,因为控制台正在打印'outside title and desc widget',但没有打印'inside snapshots'
因此,我的titleAndDescriptions列表为空,我的UI上没有3个小部件以及数据。请告诉我我做错了什么,我有什么选择呢? 预先感谢。

解决方法

使用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);

                });

在此处查看Why map doesn't work but forEach does