Firebase 如何使用flatter从firestore检索特定用户详细信息

Firebase 如何使用flatter从firestore检索特定用户详细信息,firebase,dart,flutter,google-cloud-firestore,Firebase,Dart,Flutter,Google Cloud Firestore,我是新来的,所以请容忍我。我在我的应用程序上使用电子邮件注册firestore和Flatter,注册时会将一些附加字段保存到firestore。我想检索那些显示在用户配置文件上的字段 保存到用户集合的字段的关键标识符是注册时自动生成的用户id 我的小部件构建上下文中有 child: new FutureBuilder<FirebaseUser>( future: _firebaseAuth.currentUser(), builder: (BuildC

我是新来的,所以请容忍我。我在我的应用程序上使用电子邮件注册firestore和Flatter,注册时会将一些附加字段保存到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...');
          }
        },
      ),
}

我曾尝试在_userdetails中的set状态中添加一个.then(),但它表示userdetails是一种void类型,不能分配给string。
此处的当前代码块返回“Future”实例,而不是用户详细信息。

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

        Future<void> _userDetails(userID) async {
        final userDetails = await getData(userID);
                    setState(() {
                          firstName =  userDetails.toString();
                          new Text(firstName);
        });
        }
Future\u userDetails(userID)异步{
最终用户详细信息=等待获取数据(用户ID);
设置状态(){
firstName=userDetails.toString();
新文本(名字);
});
}

添加等待会在userDetails消息上出现错误-此处的表达式类型为void,无法使用。很抱歉,仍然出现相同的错误。是因为我将userDetails声明为final吗?或者因为它是一个future void方法?我认为您需要另一个future构建器来获取userDetails,因为它是异步的。谢谢,一个嵌套的future构建器做到了这一点。
void _userDetails(userID) async {
final userDetails = getData(userID);
            setState(() {
                  firstName =  userDetails.toString();
                  new Text(firstName);
});
        Future<void> _userDetails(userID) async {
        final userDetails = await getData(userID);
                    setState(() {
                          firstName =  userDetails.toString();
                          new Text(firstName);
        });
        }