Как я могу запретить короткое появление / мигание RegistrationPage во время загрузки приложения? - PullRequest
1 голос
/ 01 апреля 2019

У меня есть приложение, в котором я проверяю RootPage в самом начале, если пользователь вошел в систему. Это делается при каждом запуске приложения.

Если он вошел в систему -> Показать StartPage Если не вошел в систему -> Показать RegistrationPage

Теперь, когда приложение загружается, 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);
  }
}

1 Ответ

1 голос
/ 01 апреля 2019

Я смог опубликовать его следующим образом. Чтобы знать, если authStatus все еще загружается, вы должны разрешить нулевое значение, поэтому измените 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();
    }
  }
...