Изучение
Миграция с Navigator, go_router и auto_route
Поэтапный перенос Route, параметров и поведения стека без одновременного переписывания всего приложения.
Миграция с Navigator, go_router и auto_route
Переносите по одной функциональности. До изменения кода зафиксируйте URL, поведение кнопки Back, правила замены экранов, возвращаемый результат, перенаправление на Login, вложенный Navigator и восстановление состояния.
Замените аргументы на Destination
// Было
context.push('/products/42', extra: product);
// Стало
context.readNavigation.push<void>(
const ProductDestination(productId: '42'),
);
Path и query переносятся в Route Definition. Функциональный код не собирает URL.
Переносите поведение, а не названия методов
| Исходная задача | Ark Navigation |
|---|---|
Navigator.push или context.push | push |
| заменить верхний экран | replaceTop |
| очистить стек и открыть Home | replaceAll |
| вернуться к известному месту | popUntil с NavigationEntryMatcher |
| StatefulShellRoute или tabs router | дочерние Scope и NavigationActiveOutlet |
| redirect callback | NavigationRedirect |
| проверка доступа | NavigationGuard |
Не заменяйте go() механически. Сначала определите, заменяет ли вызов верхний Entry, весь стек или активную ветвь.
Временное сосуществование
Старый экран может открыть входную точку уже перенесённой функциональности через небольшой адаптер, а новый сценарий — вернуть один типизированный результат. Не позволяйте двум роутерам одновременно управлять одним стеком Navigator.
Безопасный порядок
- Добавьте Destination одной функциональности.
- Создайте Route Definition и URI codec.
- Соберите Module и Mount.
- Переведите вызовы на
NavigationPort. - Проверьте Back, deep link и политики.
- Удалите старые Route этой функциональности.