如何检索单个文档数据并将其显示在应用程序中?

时间:2020-08-13 14:58:07

标签: android firebase flutter google-cloud-firestore

在这里,我正在尝试打印用户的用户名,这会产生以下错误。 The Error is as follows...

我创建了一个函数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 ....

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

2 个答案:

答案 0 :(得分:2)

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

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

答案 1 :(得分:0)

对于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()),
          );
        });
      }
    }
  );