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

问题描述 投票:1回答:1

我有一个应用程序,如果用户登录,我会在一开始就在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);
  }
}
dart flutter flutter-layout
1个回答
1
投票

我能够发布如下。要知道,如果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();
    }
  }
© www.soinside.com 2019 - 2024. All rights reserved.