Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/dart/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Dart 加载应用程序时,如何禁止注册页面短暂出现/闪烁?_Dart_Flutter_Flutter Layout - Fatal编程技术网

Dart 加载应用程序时,如何禁止注册页面短暂出现/闪烁?

Dart 加载应用程序时,如何禁止注册页面短暂出现/闪烁?,dart,flutter,flutter-layout,Dart,Flutter,Flutter Layout,我有一个应用程序,如果用户登录,我会在一开始在根页面上进行验证。每次应用程序启动时都会执行此操作 如果他已登录->显示开始页面 如果未登录->显示注册页面 现在,当应用程序加载时,RegistrationPage很快就会闪烁起来(估计在他验证登录状态的几毫秒内,您可以看到它)。我不想那样 我如何禁止注册页面的短显示 RootPage import 'package:first_app/start_screen.dart'; import 'package:first_app/user_auth/

我有一个应用程序,如果用户登录,我会在一开始在根页面上进行验证。每次应用程序启动时都会执行此操作

如果他已登录->显示开始页面 如果未登录->显示注册页面

现在,当应用程序加载时,RegistrationPage很快就会闪烁起来(估计在他验证登录状态的几毫秒内,您可以看到它)。我不想那样

我如何禁止注册页面的短显示

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);
  }
}
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,则显示一个容器。