dart - 如何在加载应用程序时禁止 RegistrationPage 的短暂出现/闪烁?
问题描述
我有一个应用程序,如果用户登录,我会在一开始就在 RootPage 上进行验证。每次应用程序启动时都会这样做。
如果他已登录 -> 显示 StartPage 如果未登录 -> 显示 RegistrationPage
现在,当应用程序加载时,RegistrationPage 会很快闪烁(猜想你可以在他验证登录状态时看到它几毫秒)。我不想要那个。
如何禁止RegistrationPage的短暂出现?
根页
import 'package:first_app/start_screen.dart';
import 'package:first_app/user_auth/registration_start_screen.dart';
import 'package:flutter/material.dart';
import 'package:first_app/user_auth/auth.dart';
class RootPage extends StatefulWidget {
RootPage({this.auth, this.completed});
final BaseAuth auth;
final bool completed;
@override
State createState() => new RootPageState();
}
enum AuthStatus { notSignedIn, signedIn }
class RootPageState extends State<RootPage> {
AuthStatus authStatus = AuthStatus.notSignedIn;
@override
void initState() {
super.initState();
signedIn();
widget.auth.currentUser().then((userId) {
//comment this setState to show login/registration screen
setState(() {
authStatus =
userId == null ? AuthStatus.notSignedIn : AuthStatus.signedIn;
print(userId);
});
}).catchError((onError) {
authStatus = AuthStatus.notSignedIn;
});
}
void signedIn() {
if (widget.completed)
setState(() {
authStatus = AuthStatus.signedIn;
});
}
@override
Widget build(BuildContext context) {
switch (authStatus) {
case AuthStatus.notSignedIn:
return RegistrationStartScreen(auth: widget.auth);
case AuthStatus.signedIn:
return StartScreen();
}
return new RegistrationStartScreen(auth: widget.auth);
}
}
解决方案
我能够将其发布如下。要知道,如果authStatus
仍在加载,则必须允许 null 值,因此更改AuthStatus authStatus = AuthStatus.notSignedIn;
为AuthStatus authStatus
.
如果值为空,则将空白容器作为后备:
Widget build(BuildContext context) {
if (authStatus != null) {
switch (authStatus) {
case AuthStatus.notSignedIn:
return RegistrationStartScreen(auth: widget.auth);
case AuthStatus.signedIn:
return StartScreen();
}
return RegistrationStartScreen(auth: widget.auth);
} else {
return Container();
}
}
推荐阅读
- vb.net - VB.NET 更改 TableAdapter 中的 SQL 查询?
- jquery - jquery checkoxes 和 php 循环
- sql - Get first value of column without using TOP 1
- c++ - 使用 C++11 的 STLPort
- swift - 计算属性和在 Swift 中将函数设置为变量之间的区别
- webforms - DropdownList asp web表单控件
- regex - 在bash中替换文件名字符串变量后的字符
- python - 将带有分子和分母的分数转换为二进制
- rest - 如何使用已经存在的 EJB 项目制作宁静的服务?
- amazon-web-services - 即使数据看起来不错,AWS Cloudwatch 警报也不会返回到 OK 状态