列出使用Flutter和Firebase收集的数据

tvmytwxo  于 2022-12-27  发布在  Flutter
关注(0)|答案(1)|浏览(110)

我刚刚学习Flutter,我正在尝试制作一个理发师预约系统。我被理发店面板卡住了。现在,我的目标是将下面的数据写入我画的正方形中,并使用网格视图制作一个系统,该系统将更新预约数据,因为它将在每次预约到来时实时监听数据库。总结,如果新数据输入数据库,一个新的方块将出现在底部并显示数据。
i want to do
但是在编写代码的过程中,我一直收到这个错误。
error 1
error 2
下面是我代码:

final Stream<QuerySnapshot> dateRef =
      FirebaseFirestore.instance.collection('date').snapshots();


StreamBuilder<QuerySnapshot>(
              stream: dateRef,
              builder: (context, AsyncSnapshot<QuerySnapshot> snapshot) {
                if (snapshot.hasError) {
                  return Text('Bir şeyler ters gitti');
                }
                return ListView(
                  children:
                      snapshot.data!.docs.map((DocumentSnapshot document) { <---- error is here
                    Map<String, dynamic> data =
                        document.data()! as Map<String, dynamic>;
                    return ListTile(
                      title: Text(data['Ad']),
                      subtitle: Text(data['Soyad']),
                    );
                  }).toList(),
                );
              },
            ),
  • Kod Planet我试图调用数据之前,观看他的频道的视频,我得到了上述错误。
  • dbestech我通过在他的频道上观看视频更改了代码,它没有再次工作,我在同一个地方不断得到相同的错误。
  • Cloud Firestore | FlutterFire我尝试了文档中实时更改标题中的代码,它仍然不起作用。
rsl1atfo

rsl1atfo1#

StreamBuilder的构建器有两个小部件选项可以显示和访问,一个是ListView,您希望在其中显示您的响应,另一个是Text on error,对吗?
StreamBuilder被放入小部件树时,dateRef流将被第一次调用,并且没有错误,因为它没有得到第一个响应,但在此之前需要显示一些内容,因此ListView被调用进行渲染,此时,没有快照,因此snapshot.datanull
你只需要设置一些东西来显示,直到得到第一个响应,这是一个CircularProgressIndicator小部件的常见用途:

StreamBuilder<QuerySnapshot>(
              stream: dateRef,
              builder: (context, AsyncSnapshot<QuerySnapshot> snapshot) {
                if (snapshot.hasError) {
                  return Text('Bir şeyler ters gitti');
                }
               if(snapshot.connectionState == ConnnectinState.waiting) { // add this
                 return Center(child: CircularProgressIndicator ());
                }
                return ListView(
                  children:
                      snapshot.data!.docs.map((DocumentSnapshot document) { 
                    Map<String, dynamic> data =
                        document.data()! as Map<String, dynamic>;
                    return ListTile(
                      title: Text(data['Ad']),
                      subtitle: Text(data['Soyad']),
                    );
                  }).toList(),
                );
              },
            ),

现在将显示加载指示器,直到它从Firebase获得第一个响应,然后它将如您所期望的那样显示ListView

相关问题