Изучение

Redirect, Guard и обновление политик

Выбор другой цели, разрешение перехода и реакция на изменение состояния как отдельные контракты.

v0.1.0-dev.2Средний уровень

Redirect, Guard и обновление политик

Redirect отвечает на вопрос «какой типизированный Target должен использоваться вместо исходного?». Guard отвечает на вопрос «разрешён ли переход?». Их объединение приводит к политике, которая меняет Controller во время разрешения текущего запроса.

Политики могут принадлежать Graph, Module, Mount или Route Definition. Redirect обрабатываются раньше Guard. У Guard есть фазы leave и enter, поэтому защита несохранённых изменений не смешивается с контролем доступа к Destination.

dart
final class EditorGuard implements NavigationGuard {
  const EditorGuard(this.editor);
  final EditorState editor;

  @override
  NavigationGuardDecision evaluate(NavigationPolicyContext context) {
    if (context.phase == NavigationGuardPhase.leave && editor.hasDraft) {
      return const NavigationGuardDenied(reason: UnsavedDraft());
    }
    return const NavigationGuardAllowed();
  }
}

Причина отказа принадлежит приложению и может быть enum или sealed-типом. Если авторизация или флаг функции меняются при открытом экране, NavigationPolicyRefresh запускает повторное согласование текущего Destination без ручных команд навигации из каждого функционального модуля.

ARKTELOS

Инженерные системы для программного обеспечения, которое обязано выдерживать нагрузку.