首页 > 解决方案 > 为什么它不让用户保持登录状态

问题描述

用户是否登录并不重要,它会进入主页。anf 如果我每次重新启动应用程序时都将登录页面设为主页,则它需要再次登录。

我希望它就像一旦登录然后登录直到你注销

void main() async {
  WidgetsFlutterBinding.ensureInitialized();
  await Firebase.initializeApp();

  runApp(MaterialApp(
    debugShowCheckedModeBanner: false,
    home: await getLandingPage(),
    routes: {
      'upload': (context) => ItemInput(),
      'suzuki': (context) => Suzuki(),
      'others': (context) => Others(),
    },
  ));
}

Future<Widget> getLandingPage() async {
  final FirebaseAuth _auth = FirebaseAuth.instance;
  return StreamBuilder<User>(
    stream: _auth.authStateChanges(),
    builder: (BuildContext context, snapshot) {
      if (snapshot.hasData && (!snapshot.data.isAnonymous)) {
        return MainPage();
      }

      return LoginPage();
    },
  );
}

标签: firebaseflutterdartfirebase-authentication

解决方案


当应用启动时,Firebase 会自动恢复用户的身份验证状态。这可能需要一些时间,因为它需要与服务器检查帐户是否仍处于活动状态。

在此期间,用户将不会登录,因此authStateChanges()会触发null. 这就是您的代码将用户重定向到登录页面的时候。

您需要等待片刻以查看用户状态是否已恢复,或者将导航逻辑移动/复制到登录页面,以便在用户身份验证状态恢复后重定向到主页。


推荐阅读