firebase - 当我打开我的颤振应用程序时,它总是显示登录屏幕几秒钟,即使我已经在上次会话中登录。在那之后主页
问题描述
当我启动我的颤振应用程序时,即使我已经登录,它也会从登录屏幕开始。几秒钟后它会自动打开主页。
我的代码:我的主要构建:-
@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_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());
}
}
推荐阅读
- java - 如何测量我的 Java + MongoDB 应用程序操作的毫秒/纳秒性能?
- c++ - std::is_invocable 在模板类型上的意外结果
- django - 如何在模型序列化器中将嵌套字段设为只读?
- python - 在 python 中,我们如何使用证书、订阅密钥连接到 API?
- python - 将不同的 sys.argv 传递给同一个 docker run 端口
- web-crawler - 使用 Stormcrawler 爬取特定子目录
- javascript - D3.js 惯性拖动
- swift - 为什么在用于 OpenGL 纹理的 CGContext 上调用绘图函数时出现 BAD_ACCESS 错误?
- javascript - JavaScript 窗口卸载不工作 [Vanilla Javascript]
- android - 使用 WireMockRule 运行 Android UI 测试时出现 java.lang.NoClassDefFoundError