Dart 加载应用程序时,如何禁止注册页面短暂出现/闪烁?
我有一个应用程序,如果用户登录,我会在一开始在根页面上进行验证。每次应用程序启动时都会执行此操作 如果他已登录->显示开始页面 如果未登录->显示注册页面 现在,当应用程序加载时,RegistrationPage很快就会闪烁起来(估计在他验证登录状态的几毫秒内,您可以看到它)。我不想那样 我如何禁止注册页面的短显示 RootPageDart 加载应用程序时,如何禁止注册页面短暂出现/闪烁?,dart,flutter,flutter-layout,Dart,Flutter,Flutter Layout,我有一个应用程序,如果用户登录,我会在一开始在根页面上进行验证。每次应用程序启动时都会执行此操作 如果他已登录->显示开始页面 如果未登录->显示注册页面 现在,当应用程序加载时,RegistrationPage很快就会闪烁起来(估计在他验证登录状态的几毫秒内,您可以看到它)。我不想那样 我如何禁止注册页面的短显示 RootPage import 'package:first_app/start_screen.dart'; import 'package:first_app/user_auth/
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);
}
}
import'package:first_app/start_screen.dart';
导入“package:first_app/user_auth/registration_start_screen.dart”;
进口“包装:颤振/材料.省道”;
导入“包:第一个应用程序/user\u auth/auth.dart”;
类RootPage扩展了StatefulWidget{
RootPage({this.auth,this.completed});
最终BaseAuth-auth;
完成最终bool;
@凌驾
State createState()=>新的RootPageState();
}
枚举身份验证状态{notSignedIn,signedIn}
类RootPageState扩展了状态{
AuthStatus AuthStatus=AuthStatus.notSignedIn;
@凌驾
void initState(){
super.initState();
signedIn();
widget.auth.currentUser().then((userId){
//注释此设置状态以显示登录/注册屏幕
设置状态(){
身份=
userId==null?AuthStatus.notSignedIn:AuthStatus.signedIn;
打印(用户标识);
});
}).catchError((onError){
authStatus=authStatus.notSignedIn;
});
}
void signedIn(){
if(widget.completed)
设置状态(){
authStatus=authStatus.signedIn;
});
}
@凌驾
小部件构建(构建上下文){
交换机(身份验证状态){
案例AuthStatus.notSignedIn:
返回RegistrationStartScreen(auth:widget.auth);
案例AuthStatus.signedIn:
返回StartScreen();
}
返回新注册开始屏幕(auth:widget.auth);
}
}
我可以发布如下内容。要知道,如果仍在加载authStatus
,则必须允许空值,因此更改authStatus authStatus=authStatus.notSignedIn代码>至AuthStatus AuthStatus
如果值为null,则使用空白容器作为回退:
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();
}
}
如果可能,请共享您的代码,以便他人易于理解。当然可以。RootPage的代码在上面。我想既然设置了notSignedIn,并且初始值为,RegistrationStartScreen会显示一毫秒,直到小部件完全加载为止?谢谢。已经找到了答案。我现在允许authStatus为null值,如果值为null,则显示一个容器。