Рецепты

События, ошибки и жизненный цикл Entry

Наблюдение без зависимости от Controller, единая обработка неожиданных ошибок и освобождение ресурсов конкретного Entry.

v1.1.0Продвинутый уровень

События, ошибки и жизненный цикл Entry

Записать запросы и решения политик

Реализуйте NavigationEventSink. События Requested, Redirected, GuardRejected, Committed и Failed имеют общий NavigationRequestId.

dart
final class AnalyticsNavigationSink implements NavigationEventSink {
  @override
  void add(NavigationEvent event) {
    analytics.record(event.runtimeType.toString());
  }
}

Отказ Guard — ожидаемое решение приложения, а не сбой.

Централизовать непредвиденные ошибки

Создайте один NavigationFailureSink рядом с кодом, который запускает NavigationSession или NavigationRuntime. Подключите его к Ark Error Manager, Sentry или уже используемой системе отчётов. Он получает объект ошибки, stack trace, ID запроса и выполненную операцию.

Управлять ресурсом одного Entry

Используйте NavigationLifecycleObserver, если подписка или controller принадлежат одному конкретному появлению страницы. Храните ресурсы по NavigationEntryId: один Route может присутствовать в стеке несколько раз.

Освобождайте ресурс при pop, замене, удалении, сбросе ветви, повторном применении политики и миграции Graph.

Не расширять зависимости функционального кода

Страницам и Presenter достаточно NavigationPort. Полные объекты Session и Controller нужны только коду запуска, диагностике, восстановлению и адаптерам жизненного цикла.