firebase - 如何在应用启动时自动登录 Firebase 用户?
问题描述
我正在尝试实现一个 Home 类,该类显示新用户的登录屏幕或以前登录用户的自动登录,并将它们直接带到应用程序。但是,当代码运行时,它会显示已登录用户的登录屏幕。
据我了解,Future 函数最初返回 null 并且代码以显示“登录页面”结束,即使 Future 稍后返回当前用户。
class Home extends StatelessWidget {
FirebaseAuth _auth = FirebaseAuth.instance;
Future<FirebaseUser> getCurrentUser() async {
return _auth.currentUser();
}
Widget userLoggedIn() {
getCurrentUser().then((user) {
if (user != null) {
//User is auto-logged in = build main app
return new Scaffold(
body: Center(
child: Text("Main App"),
),
);
} else if (user == null) {
//New user = return null
return null;
});
}
@override
Widget build(BuildContext context) {
return userLoggedIn() ??
//New user = build login page
new Scaffold(
body: Center(
child: Text("Login Page"),
),
);
}
}
你能帮我解决这个问题吗?
解决方案
您需要等到_auth.currentUser()
返回用户。
使用await
关键字而不是.then()
.
改变你的getCurrentUser()
方法。
返回 aFirebaseUser
而不是 a Future
。
FirebaseUser currentUser = await authService.getCurrentUser();
推荐阅读
- python - 在 For 循环中使用字典值的大写测验
- python - 在 Pandas 中获取工作日时出错
- python - 错误:给出双重要求:Pillow==6.1.0(来自 -r requirements.txt(第 25 行))
- python - 摆脱熊猫中的重复行
- algorithm - 关键词云是如何构建的?
- apache - Apache2 配置到 Nginx 配置?
- laravel - 将laravel部署到heroku时,参数“client_encoding”的值无效:“utf8mb4”(SQL:从“tablename”中选择*)
- jquery - 如何使用数据表“on change”选择选项更新我的数据库中的第二行
- python - 如何从字符串中检测语言,例如我在 python 3 中的 php 函数
- mongodb - 命令 '/bin/sh -c service mongod start' 返回一个非零代码: 1 在 docker