【问题标题】:Not changing screen based on Authentication Status Flutter不根据身份验证状态 Flutter 更改屏幕
【发布时间】:2021-05-09 09:39:06
【问题描述】:

根据用户是否成功通过身份验证,我正在尝试转到主屏幕或停留在身份验证屏幕上。使用 Firebase 身份验证的 authStateChanges 和流构建器。

我没有收到错误代码,控制台显示

D/FirebaseAuth(21665): Notifying id token listeners about user ( pG6pORODSGMi21fuaoql29hqXZp2 ).
D/FirebaseAuth(21665): Notifying auth state listeners about user ( pG6pORODSGMi21fuaoql29hqXZp2 ).

所以身份验证成功,当我热启动应用程序时,它会进入主屏幕并显示应有的信息。 这是代码

FutureBuilder(
        future: _initialization,
        builder: (context, appsnapShot) {
          return MaterialApp(
            title: 'Flutter Demo',
            theme: ThemeData(
              primarySwatch: Colors.blue,
            ),
            routes: {
              SignupScreen.routeName: (ctx) => SignupScreen(),
              AuthScreen.routeName: (ctx) => AuthScreen(),
              HomeScreen.routeName: (ctx) => HomeScreen(),
              UserPhoneAdds.routeName: (ctx) => UserPhoneAdds(),
              PhoneAddForm.routeName: (ctx) => PhoneAddForm(),
              EditPhoneScreen.routeName: (ctx) => EditPhoneScreen(),
            },
            home: appsnapShot.connectionState != ConnectionState.done
                ? SplashScreen()
                : StreamBuilder(
                    stream: FirebaseAuth.instance.authStateChanges(),
                    builder: (context, snapshot) {
                      if (snapshot.connectionState == ConnectionState.waiting) {
                        return SplashScreen();
                      }
                      if (snapshot.hasData) {
                        return HomeScreen();
                      } else {
                        return AuthScreen();
                      }
                    },
                  ),
          );
        });

仅供参考-这不在课程范围内,并且在来自此的应用程序中正常工作 感谢您的帮助。

【问题讨论】:

    标签: firebase flutter dart firebase-authentication


    【解决方案1】:

    authStateChanges 不返回快照,而是返回 User,正如您在官方 documentation 中看到的那样:

    FirebaseAuth.instance
      .authStateChanges()
      .listen((User user) {
        if (user == null) {
          print('User is currently signed out!');
        } else {
          print('User is signed in!');
        }
      });
    

    所以你只需检查User 是否为null。

    【讨论】:

    • 好的,谢谢。这是新更新的一部分。只是想知道就像我在 OP 中所说的那样,它可以在另一个应用程序中使用,据我所知,它的代码完全相同
    猜你喜欢
    • 2019-11-30
    • 1970-01-01
    • 1970-01-01
    • 2020-07-13
    • 2020-06-11
    • 1970-01-01
    • 2019-12-05
    • 2021-03-01
    • 1970-01-01
    相关资源
    最近更新 更多