Изучение

Session, восстановление и динамические модули

Один Session на Flutter View, границы восстановления и безопасное обновление общего Graph.

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

Session, восстановление и динамические модули

Большинству приложений достаточно NavigationSession. NavigationRuntime нужен нескольким окнам с общим Graph или установке модулей во время работы.

Один Session на View

Session хранит собственные стеки, ключи Navigator, обработку Back, текущий URI и ожидающие результата Ticket. Несколько окон могут использовать общие определения Route, но не общее изменяемое состояние навигации.

dart
final runtime = NavigationRuntime(graph: createBaseGraph());
final main = runtime.createSession(id: const NavigationSessionId('main'));
final inspector = runtime.createSession(
  id: const NavigationSessionId('inspector'),
);

Что восстанавливается

Восстанавливаемые Entry создаются заново через URI codec и stackPlanBuilder. Entry с политикой sessionOnly пропускаются. Публичный URI соответствует ближайшему восстанавливаемому Entry активной ветви.

Транзакционное обновление Graph

dart
final results = await runtime.updateGraph(
  (builder) {
    builder.installModule(createReportsModule());
    builder.mount(reportsMount);
  },
  activeEntries: const RejectActiveNavigationEntries(),
);

Для удаляемого активного Route выберите явную политику: отклонить обновление, удалить Entry или мигрировать его в совместимый Destination.

Динамическое обновление Graph нужно плагинам и функциям, которые подключаются во время работы. Для обычного открытия страницы используйте NavigationPort.