Firebase 当我打开我的Flitter应用程序时,它总是会在几秒钟内显示登录屏幕,即使我已经在上次会话中登录。在主页之后呢
当我启动我的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
@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());
}
}
如何在启动屏幕中检查此逻辑?你能给我一个主意吗。