#dart #flutter #flutter-layout
#dart #трепетание #flutter-layout
Вопрос:
У меня есть приложение, в котором я проверяю на корневой странице в самом начале, если пользователь вошел в систему. Это делается при каждом запуске приложения.
Если он вошел в систему -> показать стартовую страницу, если не вошел в систему -> показать страницу регистрации
Теперь, когда приложение загружается, страница регистрации быстро мигает (думаю, вы можете видеть это пару миллисекунд, пока он проверяет статус входа в систему). Я этого не хочу.
Как я могу запретить короткое отображение страницы регистрации?
Корневая страница
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. Если возможно, пожалуйста, поделитесь своим кодом, чтобы его было легко понять другим.
2. Конечно. код для корневой страницы приведен выше. Я думаю, поскольку установлен notSignedIn и начальное значение, экран RegistrationStartScreen отображается в течение миллисекунды, пока виджет не будет полностью загружен?
3. Спасибо. Уже найден ответ. Теперь я разрешаю нулевые значения для authStatus и показываю контейнер, если значение равно нулю.
Ответ №1:
Я смог опубликовать это следующим образом. Чтобы знать, что authStatus
все еще загружается, вы должны разрешить значение null, поэтому измените 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();
}
}