Изучение
Изучение Ark Navigation
Запустите рабочий Flutter Router, а затем последовательно добавьте типизированные Route, операции над стеком, политики, ссылки, вкладки и восстановление.
Изучайте Ark Navigation на рабочем коде
Чтобы открыть первый экран, не нужно заранее разбираться во всей архитектуре. Начните с трёх сущностей:
// Функциональный код описывает цель перехода.
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 меньше готовых интеграций, чем у старых роутеров, поэтому заранее убедитесь, что его явные контракты решают реальные задачи вашего приложения.
Рекомендуемый порядок
- Destination и Route — типизированный переход и страница.
- Операции над стеком — предсказуемое поведение Back.
- Redirect и Guard — Login, проверка доступа и несохранённые изменения.
- URI и ссылки — типизированные параметры и восстановление родителей.
- Module и вложенная навигация — функциональные модули и независимые стеки вкладок.
- Session и восстановление — жизненный цикл, история браузера и динамический Graph.