В последнее время я боролся с этим. Я не понимаю поведение трепетания здесь.
Я пытаюсь сделать страницу пользователя / логина / регистрации. Для этого я использую Firebase Cloud Firestore и FireBase Auth. У меня есть провайдер, который хранит статус пользователя
enum Status { Uninitialized, Authenticated, Authenticating, Unauthenticated, Register, AuthenticatingRegister, RegisterTransit, RegisterNS, AuthenticatingRegisterNS }
class UserRepository with ChangeNotifier {
FirebaseAuth _auth;
FirebaseUser _user;
Status _status = Status.Uninitialized;
Так я реализую свою функцию входа в систему. SingUp, LogOut LogOut очень похожи.
Future<bool> signIn(String email, String password) async {
try {
_status = Status.Authenticating;
notifyListeners();
await _auth.signInWithEmailAndPassword(email: email, password: password, );
return true;
} catch (e) {
_status = Status.Unauthenticated;
notifyListeners();
return false;
}
}
У меня есть пользовательский экран, когда в зависимости от состояния я выбираю, какой экран показывать.
class UserScreen extends StatelessWidget {
@override
Widget build(BuildContext context) {
return ChangeNotifierProvider(
create: (_) => UserRepository.instance(),
child: Consumer(
builder: (context, UserRepository user, _) {
switch (user.status) {
case Status.RegisterNS:
case Status.AuthenticatingRegisterNS:
return FormNS();
case Status.RegisterTransit:
return LoginMeio();
case Status.Unauthenticated:
case Status.Authenticating:
return LoginPage();
case Status.Authenticated:
return UserInfoPage(user: user.user);
case Status.Register:
case Status.AuthenticatingRegister:
return RegisterScreen();
case Status.Uninitialized:
return Splash();
default:
return Splash();
}
},
),
);
}
}
Я не обозначен снизу Вкладка Навигатор для навигации по приложению.
Все работает, как задумано, часть мелочи. Я инициализирую статус как неинициализированный на UserRepository
провайдере. Каждый раз, когда я на короткое время открываю UserScreen
, перед тем как я перенаправлюсь на нужный экран, отображается экран spla sh. Это прекрасно, когда пользователь впервые хочет перейти на UserScreen
. Но после этого я просто хочу, чтобы правильная страница открывалась напрямую, не проходя через экран Spla sh.
Если мне не хватает четких просьб, скажите мне.
У меня вопрос. Если я go захожу на страницу и возвращаюсь на экран пользователя, как я могу предотвратить инициализацию статуса как Status.Uninitialized до того, как он распознает правильный статус и вернет правильную страницу?