Flutter 如何检查颤振中的用户会话和通过路由?

Flutter 如何检查颤振中的用户会话和通过路由?,flutter,firebase-authentication,Flutter,Firebase Authentication,我在Flatter中使用下面的代码来启动该应用程序,它正在路由上工作,但我希望如果用户已经登录,那么它应该移动到主页(),否则移动到登录页面,但在我实现时,它不起作用。请建议,怎么做 我正在使用Firebase身份验证 class App extends StatelessWidget { @override Widget build(BuildContext context) { return MaterialApp( title: 'Flutter Social'

我在Flatter中使用下面的代码来启动该应用程序,它正在路由上工作,但我希望如果用户已经登录,那么它应该移动到
主页()
,否则移动到
登录页面
,但在我实现时,它不起作用。请建议,怎么做

我正在使用Firebase身份验证

class App extends StatelessWidget {
  @override
  Widget build(BuildContext context) {
    return MaterialApp(
      title: 'Flutter Social',
      debugShowCheckedModeBanner: false,
      theme: buildThemeData(),
      onGenerateRoute: router.generateRoute,
      initialRoute: landingViewRoute,
      home: _handleAuth(),
    );
  }

  Widget _handleAuth() {
    return StreamBuilder<FirebaseUser>(
      stream: FirebaseAuth.instance.onAuthStateChanged,
      builder: (BuildContext context, snapshot) {
        return (!snapshot.hasData)
            ? HomePage()
            : LandingPage();
      },
    );
  }
}
类应用程序扩展了无状态小部件{
@凌驾
小部件构建(构建上下文){
返回材料PP(
标题:“颤振社交”,
debugShowCheckedModeBanner:false,
主题:buildThemeData(),
onGenerateRoute:router.generateRoute,
初始路线:着陆视图路线,
主页:_handleAuth(),
);
}
Widget_handleAuth(){
返回流生成器(
流:FirebaseAuth.instance.onAuthStateChanged,
生成器:(BuildContext上下文,快照){
返回(!snapshot.hasData)
?主页()
:LandingPage();
},
);
}
}
这是我在firebase auth应用程序上使用的

对FirebaseAuth的authStateChange使用connectionStatus,因为如果数据为null,则不会调用snapshot.hasData

这是我在firebase auth应用程序上使用的


在FirebaseAuth的authStateChange上使用connectionStatus,因为如果数据为null,则不会调用snapshot.hasData。

继续为未签名用户生成主页,为空。并在onAuthStateChanged回调后使用已签名用户重建页面或路由到登录页面。继续为未签名用户生成主页,空白。并在onAuthStateChanged回调后使用已签名的用户重新生成页面或路由到登录页面。
StreamBuilder(
         stream: auth.onAuthChange,
         builder: (BuildContext context,AsyncSnapshot snapshot){
        if(snapshot.connectionState==ConnectionState.active){
          User user =snapshot.data;

          if(user==null){
            return AuthOptions();
          }

          else{

                      return ClientDashBoard();

                }
      return Center(child: CircularProgressIndicator(valueColor: AlwaysStoppedAnimation(Colors.pinkAccent),));
            });
          }
        }
        if(snapshot.hasError){
          return Center(child: Text(snapshot.error),);
        }
        return Center(child: CircularProgressIndicator(valueColor: AlwaysStoppedAnimation(Colors.pinkAccent),),);