我有一个应用程序,如果用户登录,我会在一开始就在RootPage上进行验证。每次应用程序启动时都会这样做。
如果他已登录 - >显示开始页面如果未登录 - >显示注册页面
现在当应用程序加载时,注册页面很快就会闪烁(猜测你可以在验证登录状态时看到它几毫秒)。我不希望这样。
如何禁止注册页面的短暂出现?
RootPage
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
仍在加载,则必须允许空值,因此将AuthStatus authStatus = AuthStatus.notSignedIn;
更改为AuthStatus authStatus
。
如果value为null,则将空白Container作为后备:
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();
}
}