如何在应用开始时自动登录Firebase用户?

问题描述 投票:0回答:2

我正在尝试实现一个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"),
        ),
      );
}

}

你能帮帮我解决这个问题吗?

firebase flutter firebase-authentication
2个回答
0
投票

您可以在LoginPageinitState中启动自动登录进度,

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()


0
投票

您需要等到_auth.currentUser()返回用户。

使用await关键字而不是.then()

改变你的getCurrentUser()方法。

返回FirebaseUser而不是Future

FirebaseUser currentUser = await authService.getCurrentUser();

© www.soinside.com 2019 - 2024. All rights reserved.