【问题标题】:How to retrieve the single document data and show it in app?如何检索单个文档数据并在应用程序中显示?
【发布时间】:2020-12-03 11:01:55
【问题描述】:

在这里,我正在尝试打印用户的用户名,它会产生以下错误。

我创建了一个函数 userData(),代码是

userData() async
  {
    var userData = await _db.collection('users').document(_uuid).get();
    return userData;
  }

我将使用 uid 获取特定用户的数据并返回它。

我用来打印数据的代码如下

return FutureBuilder(
    future: authService.userData(),
    builder: (_,snapshots){
      if(snapshots.connectionState == ConnectionState.waiting)
      {
        
        return Center(child: Text('Loading...'),);
      }
      else{
        print("Snapshots: "+snapshots.toString());
        return ListView.builder(itemCount: 1, itemBuilder: (_,index){
          return ListTile(
            title: Text(snapshots.data["username"].toString()),
          );
        });
      }
    }
  );

firestore的结构是

Collection('user') -> document(uid) -> 1.username 2.email ....

此错误的原因是什么以及如何解决?

【问题讨论】:

    标签: android firebase flutter google-cloud-firestore


    【解决方案1】:

    错误消息告诉您snapshots.data 为空,因此您无法使用[] 运算符对其进行索引。

    在使用DocumentSnapshot 之前,您应该在访问其字段数据之前检查它是否为exists。如果文档不存在,快照的data 属性将为空。

    【讨论】:

    • 出于测试目的,我使用了 Firestore 中存在的文档 ID。因为它返回 null 。是什么原因?
    • SDK 告诉您该文档不存在。我无法验证这一点,因为我看不到您正在使用的数据。
    • 是的,现在我已将 Firestore 数据更新为图像
    • 我们仍然看不到您传递了正确的 _uuid 值。如果您传递文档 ID 以外的任何内容,则您的快照将不包含任何数据。
    • 我刚刚在 Firestore 中分配了相同的 _uuid。只需复制并粘贴并分配 _uuid 的值
    【解决方案2】:

    对于 Firestore,我建议使用 Stream Builder 而不是未来的 Builder。

    return StreamBuilder(
        stream: Firestore.instance
                    .collection('user')
                    .document(uid)
                    .snapshots(),
        builder: (_,snapshot){
          if(!snapshot.hasData)
          {
            
            return Center(child: Text('Loading...'),);
          }
          else{
            
            return ListView.builder(itemCount: 1, itemBuilder: (_,index){
              return ListTile(
                title: Text(snapshots.data["username"].toString()),
              );
            });
          }
        }
      );
    

    【讨论】:

      猜你喜欢
      • 2012-11-21
      • 2016-11-23
      • 1970-01-01
      • 2012-12-18
      • 2023-03-27
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多