Навигация по флаттеру в зависимости от состояния авторизации
Я создаю приложение Flutter с аутентификацией пользователя (firebase, но неважно) и хотел бы иметь два набора маршрутов для аутентифицированных и неаутентифицированных пользователей:
неаутентифицированные пользователи: / войти / зарегистрироваться...
аутентифицированные пользователи: /home ...
Я пытался иметь на верхнем виджете переключатель с чем-то вроде этого:
switch(_user.status) {
case UserStatus.Unauthenticated:
return MaterialApp(
title: _title,
theme: _themeData,
routes: ....
initialRoute: "/login",
);
case UserStatus.Authenticated:
return MaterialApp(
title: _title,
theme: _themeData,
onGenerateRoute: _generateRoute,
initialRoute: "/",
);
(Я получил _user
значение с ChangeNotifierProvider
в верхней части дерева) но, видимо, не возможно иметь 2 лучших навигатора.
Во-вторых, я попытался нажать на переключатель в _generateRoute
функция, но есть некоторое кэширование: когда дерево перестраивается (например, когда _user.status
изменить _generateRoute
функция не вызывается снова и так не работает.
Как вы решаете это?
1 ответ
Вы можете использовать троичный оператор для этого:
MaterialApp(
title: _title,
theme: _themeData,
routes: ....
initialRoute: _user.status == UserStatus.Unauthenticated ? "/login" : "",
);