StreamBuilder无法从FireStore获取数据扑

时间:2020-11-08 14:45:33

标签: android ios flutter dart stream-builder

在我的应用程序中,我需要获取当前用户的配置文件数据,然后才能继续。 我尝试通过在代码中使用StreamBuilder来实现这一目标。

我的问题: StreamBuilder始终返回else语句。好像他无法从FireStore-Collection“用户”中加载任何数据一样。

return StreamBuilder<QuerySnapshot>(
        stream: Firestore.instance.collection('Users').snapshots(), // It seems like he cannot load any data from the collection 'Users'...
        builder: (BuildContext context, AsyncSnapshot<QuerySnapshot> snapshot){
          if (snapshot.hasData) {
            print("Loaded data successfully");
            return Container(color: CupertinoColors.systemGreen,); 
          } else {
            print("Could not load data");
            return Container(color: CupertinoColors.systemRed,); // The Code always ends here
          }
        }
      );

此外,我没有收到任何错误消息。

Flutter Doctor:

[✓] Flutter(在Mac OS X 10.15.6 19G2021上,通道稳定为1.20.4, 区域设置DE-)
[✓] Android工具链-为Android开发 设备(Android SDK版本30.0.2)
[✓] Xcode-为iOS开发 和macOS(Xcode 12.1)
[✓] Android Studio(4.0版)
[✓] 已连接的设备(1个可用)

•找不到问题!

为什么我没有从Firestore获取任何数据?

编辑:

我的Firestore“用户”收藏夹(三星):

Image of my Firestore collection

2 个答案:

答案 0 :(得分:0)

StreamBuilder看起来不错,检查是否创建了“ Users”集合并在那里有数据,在我看来这是失败的原因。问题不在Flutter中,更多的是您的数据问题,这就是为什么您不会得到输出错误的原因。

答案 1 :(得分:0)

尝试一下,

return StreamBuilder(
                stream: Firestore.instance
                    .collection('Users')
                    .snapshots(),
                builder: (BuildContext context,
                    AsyncSnapshot<QuerySnapshot> snapshot) {
                  print("snapshotData"+snapshot.data.toString());
                  if (snapshot.data.toString()=='null')
                    return Container(color: CupertinoColors.systemRed); 
                  if (snapshot.hasError)
                     return Container(color: CupertinoColors.systemRed); 
                  if(snapshot.data.documents.length<1)
                   return Container(color: CupertinoColors.systemRed); 
                  switch (snapshot.connectionState) {
                    case ConnectionState.waiting:
                      return new Text('Loading...');
                    default:
                     return Container(color: CupertinoColors.systemGreen); 
                  }
                },
              );

我也在添加空白/空值的条件。