我正在尝试实现一个Home类,它显示新用户的登录屏幕或以前在用户中签名的自动登录,并将它们直接带到应用程序。但是,当代码运行时,它会显示已登录用户的登录屏幕。
根据我的理解,Future函数最初返回null并且代码结束时显示“Login Page”,即使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"),
),
);
}
}
你能帮帮我解决这个问题吗?
您可以在LoginPage
的initState
中启动自动登录进度,
LoginPage
必须是StatefulWidget
才能使用initState
@override
void initState() {
FirebaseAuth.instance.currentUser().then((user) {
if (user != null) { //if there isn't any user currentUser function returns a null so we should check this case.
Navigator.pushAndRemoveUntil(
// we are making YourHomePage widget the root if there is a user.
context,
MaterialPageRoute(builder: (context) => YourHomePage()),
(Route<dynamic> route) => false);
}
});
super.initState();
}
signOut与该方法:
FirebaseAuth.instance.signOut()
您需要等到_auth.currentUser()
返回用户。
使用await
关键字而不是.then()
。
改变你的getCurrentUser()
方法。
返回FirebaseUser
而不是Future
。
FirebaseUser currentUser = await authService.getCurrentUser();