首页 > 解决方案 > 如何使用颤振从 Firestore 中检索特定的用户详细信息

问题描述

我是颤振和火力的新手,所以请耐心等待。我在我的应用程序上使用带有firestore和flutter的电子邮件注册,注册时一些额外的字段被保存到firestore。我想检索这些字段以显示在用户个人资料上。

保存到用户集合的字段的关键标识符是注册时自动生成的用户 ID。

我在我的小部件构建上下文中

child: new FutureBuilder<FirebaseUser>(
        future: _firebaseAuth.currentUser(),
        builder: (BuildContext context, AsyncSnapshot<FirebaseUser> snapshot) {
          if (snapshot.connectionState == ConnectionState.done) {
            String userID = snapshot.data.uid;
            _userDetails(userID);
            return new Text(firstName);
          }
          else {
            return new Text('Loading...');
          }
        },
      ),

我的获取关联数据方法是:

Future<void> getData(userID) async {
// return await     Firestore.instance.collection('users').document(userID).get();
DocumentSnapshot result = await     Firestore.instance.collection('users').document(userID).get();
return result;

}

检索用户详细信息

void _userDetails(userID) async {
final userDetails = getData(userID);
            setState(() {
                  firstName =  userDetails.toString();
                  new Text(firstName);
});

}

我尝试将 .then() 添加到 _userdetails 中的设置状态,但它说 userDetails 是 void 类型,不能分配给字符串。此处的当前代码块返回“Future”实例而不是用户详细信息。

标签: firebasedartfluttergoogle-cloud-firestore

解决方案


您的方法被标记为,async因此您必须等待结果:

        Future<void> _userDetails(userID) async {
        final userDetails = await getData(userID);
                    setState(() {
                          firstName =  userDetails.toString();
                          new Text(firstName);
        });
        }

推荐阅读