Изучение
Session, восстановление и динамические модули
Один Session на Flutter View, границы восстановления и безопасное обновление общего Graph.
Session, восстановление и динамические модули
Большинству приложений достаточно NavigationSession. NavigationRuntime нужен нескольким окнам с общим Graph или установке модулей во время работы.
Один Session на View
Session хранит собственные стеки, ключи Navigator, обработку Back, текущий URI и ожидающие результата Ticket. Несколько окон могут использовать общие определения Route, но не общее изменяемое состояние навигации.
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
final results = await runtime.updateGraph(
(builder) {
builder.installModule(createReportsModule());
builder.mount(reportsMount);
},
activeEntries: const RejectActiveNavigationEntries(),
);
Для удаляемого активного Route выберите явную политику: отклонить обновление, удалить Entry или мигрировать его в совместимый Destination.
Динамическое обновление Graph нужно плагинам и функциям, которые подключаются во время работы. Для обычного открытия страницы используйте NavigationPort.