Firebase 当我打开我的Flitter应用程序时,它总是会在几秒钟内显示登录屏幕,即使我已经在上次会话中登录。在主页之后呢

Firebase 当我打开我的Flitter应用程序时,它总是会在几秒钟内显示登录屏幕,即使我已经在上次会话中登录。在主页之后呢,firebase,flutter,google-cloud-firestore,firebase-authentication,google-signin,Firebase,Flutter,Google Cloud Firestore,Firebase Authentication,Google Signin,当我启动我的Flitter应用程序时,即使我已经登录,它也会从登录屏幕开始。几秒钟后,它会自动打开主页 我的代码: 我的主要身材:- @override Widget build(BuildContext context) { //saveUserInfoToFireStore(); if(isSignedIn) { return buildHomeScreen(); } else{ return buildSignInScreen(); } } 这是我的初始化函数:- bool i

当我启动我的Flitter应用程序时,即使我已经登录,它也会从登录屏幕开始。几秒钟后,它会自动打开主页

我的代码: 我的主要身材:-

@override
Widget build(BuildContext context) {

//saveUserInfoToFireStore();
if(isSignedIn)
{
  return buildHomeScreen();
}
else{
  return buildSignInScreen();
}
}
这是我的初始化函数:-

bool isSignedIn = false;
void initState() {
super.initState();

pageController = PageController();

gSignIn.onCurrentUserChanged.listen((gSigninAccount){
  controlSignIn(gSigninAccount);
}, onError:(gError){
  print("Error Message: " +gError);
});

gSignIn.signInSilently(suppressErrors: false).then((gSignInAccount){
  controlSignIn(gSignInAccount);

}).catchError((gError){
  print("Error Message: "+gError); // + gerror
});
}

controlSignIn(GoogleSignInAccount signInAccount) async {
if(signInAccount != null)
  {

     final GoogleSignInAccount gCurrentUser = gSignIn.currentUser;
     DocumentSnapshot documentSnapshot = await usersReference.doc(gCurrentUser.id).get();
     currentUser = User.fromDocument(documentSnapshot);
     setState(() {
       isSignedIn=true;
     });


    configureRealTimePushNotifications();
  }
else{
  setState(() {
    isSignedIn = false;
  });
}
}

登录后,我希望每次打开应用程序时,它只显示主页,而不是登录页面。

这是因为您使用
controlSignIn
方法来确定用户是否登录。由于它是一个
async
函数,因此确定登录用户需要一些时间。因此,您可以先看到登录页面,然后是主页

您可以通过在启动屏幕中检查此逻辑来解决此问题,然后导航到相应的页面-登录或主页

创建新文件:
splash\u page.dart
。您的
SplashPage
应该如下所示:

class SplashPage extends StatefulWidget {
  @override
  _SplashPageState createState() => _SplashPageState();
}

class _SplashPageState extends State<SplashPage> {
  @override
  void initState() {
    super.initState();
    // your logic to check whether user is signed in or not
    // If user is logged in navigate to HomePage widget
    // Else navigate to SignInPage
  }

  @override
  Widget build(BuildContext context) {
    return const Center(child: CircularProgressIndicator());
  }
}
class SplashPage扩展StatefulWidget{
@凌驾
_SplashPageState createState()=>\u SplashPageState();
}
类PageState扩展了状态{
@凌驾
void initState(){
super.initState();
//检查用户是否已登录的逻辑
//如果用户已登录,请导航到主页小部件
//否则导航到SigningPage
}
@凌驾
小部件构建(构建上下文){
返回常量中心(子项:CircularProgressIndicator());
}
}

如何在启动屏幕中检查此逻辑?你能给我一个主意吗。