Изучение

Изучение Ark Navigation

Запустите рабочий Flutter Router, а затем последовательно добавьте типизированные Route, операции над стеком, политики, ссылки, вкладки и восстановление.

v1.1.0Начальный уровень

Изучайте Ark Navigation на рабочем коде

Чтобы открыть первый экран, не нужно заранее разбираться во всей архитектуре. Начните с трёх сущностей:

dart
// Функциональный код описывает цель перехода.
final class ProductDestination extends NavigationDestination<bool> {
  const ProductDestination(this.id);
  final String id;
}

// Композиция приложения связывает цель с UI и URL.
final productRoute = NavigationRouteDefinition<ProductDestination, bool>(
  id: const NavigationRouteId('product'),
  pageBuilder: (context, destination, entry) => ProductPage(id: destination.id),
  uriCodec: CallbackNavigationUriCodec<ProductDestination>(
    pattern: '/products/:id',
    encoder: (destination) => Uri(path: '/products/${destination.id}'),
    decoder: (match) => ProductDestination(match.path('id')),
  ),
);

// Страница запрашивает конкретное изменение стека.
final ticket = context.readNavigation.push<bool>(
  const ProductDestination('keyboard-42'),
);

Destination — типизированная цель приложения. RouteDefinition — адаптер к Flutter. NavigationPort изменяет стек. Остальные сущности помогают использовать эту связку в больших приложениях.

Выберите свой маршрут

ЗадачаС чего начать
Запустить приложение прямо сейчасРуководства → Первый типизированный Route
Оценить пакет для проектаDestination и Route, затем Операции над стеком
Добавить аутентификациюРуководства → Аутентификация и доступ
Сделать вкладки с сохранением стековРуководства → Модульные вкладки
Перейти с go_router или auto_routeМиграция
Решить одну конкретную задачуРецепты

Что меняется по сравнению с популярными роутерами

Контракты Route пишутся обычным Dart-кодом. Генератор не нужен, а параметры не прячутся в extra. Функциональный код компилируется сразу после появления Destination; конкретную страницу и место в приложении можно определить позже.

Каждое изменение стека выражено отдельным методом: push, replaceTop, replaceAll, pushAndRemoveUntil, replaceTail, popUntil и операции над ветвями. Универсальный go() не решает за вас, куда вернёт кнопка Back.

Проверьте применимость до миграции

Ark Navigation подходит приложению, если нужны типизированные параметры без генерации, несколько независимо управляемых стеков Navigator, повторное использование Module в разных приложениях, раздельные Redirect и Guard или явные операции перестройки стека с предсказуемым поведением Back.

Оставьте обычный Navigator или выберите зрелый URL-роутер, если у приложения небольшой статический набор маршрутов, стандартные deep links и нет задачи управлять размещением Module или обновлять Graph во время работы. У Ark Navigation 1.x меньше готовых интеграций, чем у старых роутеров, поэтому заранее убедитесь, что его явные контракты решают реальные задачи вашего приложения.

Рекомендуемый порядок

  1. Destination и Route — типизированный переход и страница.
  2. Операции над стеком — предсказуемое поведение Back.
  3. Redirect и Guard — Login, проверка доступа и несохранённые изменения.
  4. URI и ссылки — типизированные параметры и восстановление родителей.
  5. Module и вложенная навигация — функциональные модули и независимые стеки вкладок.
  6. Session и восстановление — жизненный цикл, история браузера и динамический Graph.