Рецепты
Аутентификация, доступ и несохранённые изменения
Redirect на Login, отказ в доступе, защита несохранённых изменений и повторная проверка после выхода.
v1.1.0Средний уровень
Аутентификация, доступ и несохранённые изменения
Нет сессии: открыть Login
Реализуйте NavigationRedirect и верните LoginDestination. Не вызывайте push внутри Redirect.
dart
if (!session.isSignedIn && context.target.destination is AccountDestination) {
return const NavigationTarget<Object?>(destination: LoginDestination());
}
return null;
Нет разрешения: оставить текущий экран
dart
if (context.phase == NavigationGuardPhase.enter && !permissions.canManageUsers) {
return const NavigationGuardDenied(reason: AccessReason.missingPermission);
}
return const NavigationGuardAllowed();
Вызывающий код получает NavigationRejected и выбирает способ отображения.
Есть несохранённые изменения
На фазе leave верните NavigationGuardDenied. Guard только сообщает об отказе: диалог подтверждения показывается снаружи. После согласия пользователя пометьте изменения сохранёнными или разрешите выход и повторите переход.
Пользователь вышел при открытом Account
Передайте ListenableNavigationPolicyRefresh(sessionState) в NavigationSession. После notifyListeners() политика будет применена к уже открытому Account. Поэтому NavigationPort не нужно передавать во все приватные страницы только ради обработки выхода.