Навигация по флаттеру в зависимости от состояния авторизации

Я создаю приложение 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" : "",
);
Другие вопросы по тегам