Изучение

Миграция с Navigator, go_router и auto_route

Поэтапный перенос Route, параметров и поведения стека без одновременного переписывания всего приложения.

v1.1.0Средний уровень

Миграция с Navigator, go_router и auto_route

Переносите по одной функциональности. До изменения кода зафиксируйте URL, поведение кнопки Back, правила замены экранов, возвращаемый результат, перенаправление на Login, вложенный Navigator и восстановление состояния.

Замените аргументы на Destination

dart
// Было
context.push('/products/42', extra: product);

// Стало
context.readNavigation.push<void>(
  const ProductDestination(productId: '42'),
);

Path и query переносятся в Route Definition. Функциональный код не собирает URL.

Переносите поведение, а не названия методов

Исходная задачаArk Navigation
Navigator.push или context.pushpush
заменить верхний экранreplaceTop
очистить стек и открыть HomereplaceAll
вернуться к известному местуpopUntil с NavigationEntryMatcher
StatefulShellRoute или tabs routerдочерние Scope и NavigationActiveOutlet
redirect callbackNavigationRedirect
проверка доступаNavigationGuard

Не заменяйте go() механически. Сначала определите, заменяет ли вызов верхний Entry, весь стек или активную ветвь.

Временное сосуществование

Старый экран может открыть входную точку уже перенесённой функциональности через небольшой адаптер, а новый сценарий — вернуть один типизированный результат. Не позволяйте двум роутерам одновременно управлять одним стеком Navigator.

Безопасный порядок

  1. Добавьте Destination одной функциональности.
  2. Создайте Route Definition и URI codec.
  3. Соберите Module и Mount.
  4. Переведите вызовы на NavigationPort.
  5. Проверьте Back, deep link и политики.
  6. Удалите старые Route этой функциональности.