从Flatter中的Firebase检索用户电子邮件

从Flatter中的Firebase检索用户电子邮件,firebase,flutter,dart,google-cloud-firestore,firebase-authentication,Firebase,Flutter,Dart,Google Cloud Firestore,Firebase Authentication,在我的AuthProvider类中,我在其中处理登录、注销和注销身份验证,我创建了两个函数,它们返回一个类似下面的字符串 Future<String> currentUser() async { FirebaseUser user = await _auth.currentUser(); return user.uid; } Future<String> getCurrentUserEmail() async { FirebaseU

在我的AuthProvider类中,我在其中处理登录、注销和注销身份验证,我创建了两个函数,它们返回一个类似下面的字符串

  Future<String> currentUser() async {
    FirebaseUser user = await _auth.currentUser();
    return user.uid;
  }


  Future<String> getCurrentUserEmail() async {
    FirebaseUser user = await _auth.currentUser();
    final String email = user.email.toString();
  //  print(email);
    return email;
  }
我尝试使用currenUser()和getCurrentUserEmail()来显示loggedIn用户的电子邮件,但我一直在显示“未来的实例”

这里有我忽略的东西吗?我已经尝试了我能想到的所有可能的黑客


谢谢。

因为您的
getCurrentUserEmail
返回一个
未来的
,所以您需要在构建方法中使用它

accountEmail: FutureBuilder<String>(
  future: AuthProvider.of(context).auth.getCurrentUserEmail(),
  builder: (BuildContext context, AsyncSnapshot<String> snapshot) {
    if (snapshot.hasData) {
      return Text(snapshot.data)
    }
    else {
      return Text("Loading user data...")
    }

  }
)
accountEmail:FutureBuilder(
future:AuthProvider.of(context.auth.getCurrentUserEmail(),
生成器:(BuildContext上下文,异步快照){
if(snapshot.hasData){
返回文本(snapshot.data)
}
否则{
返回文本(“正在加载用户数据…”)
}
}
)

您需要在函数前面添加~wait~,因为它是一个返回~Future的函数~

等待AuthProvider.of(context.auth.getCurrentUserEmail())

最好的办法是升级到
firebase\u auth:0.18.0
,升级后可以同步获得
currentUser

dependencies:
  flutter:
    sdk: flutter
  firebase_core : ^0.5.0
  firebase_auth : ^0.18.0
初始化Firebase:

void main() async {
  WidgetsFlutterBinding.ensureInitialized();
  await Firebase.initializeApp();
  runApp(MyApp());
}
然后在
UsersAccountDrawerHeader
中:

   UserAccountsDrawerHeader(
      accountName: Text('Brad Pitt'),
      accountEmail: Text('${auth.instance.currentUser.email}'),
同时检查:


我无法在生成方法中调用此函数。它会抛出一个错误,迫使我声明我的默认构建函数为将来的函数,并向其中添加异步。谢谢。当前依赖项版本为firebase_core:^0.4.5 firebase_auth:^0.16.1 cloud_firestore:^0.13.7根据您的建议,云firestore的哪个版本将与上述firebase_auth和firebase_core更新兼容?0.14.0和core 0.5.0,如答案所示,auth 0.18.0检查谢谢!我很感激。似乎我必须用这些新的更新在应用程序范围内进行更改。这也不能解决我的问题。我看到红色和黄色的潦草线条。错误消息如下:生成函数返回bull。有问题的小部件是:FutureBuilder生成函数不能返回null。要返回导致建筑小部件填满可用空间的空白空间,请返回“Container()”。要返回一个占用尽可能少空间的空白空间,请返回“Container(width:0.0,height:0.0)”。啊,这可能是因为缺少returns语句,所以我更新了答案以添加这些语句。我还添加了有关
FutureBuilder
的文档链接。我强烈建议您了解这一点(它是什么,为什么需要它,它是如何工作的),这样您就可以自己解决后续问题。
   UserAccountsDrawerHeader(
      accountName: Text('Brad Pitt'),
      accountEmail: Text('${auth.instance.currentUser.email}'),