Изучение
URI, deep link и восстановление
Кодирование типизированных Destination, поддержка старых ссылок, восстановление родителей и фильтрация внешних URI.
URI, deep link и восстановление
Код функциональности передаёт Destination. Разбор path и query остаётся внутри Route Definition.
Кодирование параметров
final searchCodec = CallbackNavigationUriCodec<SearchDestination>(
pattern: '/search',
encoder: (value) => Uri(
path: '/search',
queryParameters: <String, String>{'q': value.query},
),
decoder: (match) => SearchDestination(
query: match.uri.queryParameters['q'] ?? '',
),
);
Вызывающий код использует SearchDestination(query: 'keyboard'), а не Map с query parameters.
Восстановление родителей
stackPlanBuilder: (product) => <NavigationTarget<Object?>>[
const NavigationTarget<Object?>(destination: HomeDestination()),
const NavigationTarget<Object?>(destination: CatalogDestination()),
NavigationTarget<Object?>(destination: product),
],
Прямое открытие /products/42 создаёт [Home, Catalog, Product], поэтому Back ведёт в Catalog.
Сохранение старых URL
Для старого /item/42 добавьте NavigationUriAlias, который используется только при чтении. Основной URI codec продолжит формировать /products/42.
Проверка входящих ссылок
NavigationPlatformLinkConfiguration проверяет домен и префикс пути до передачи ссылки в Graph. Настройки Android App Links и iOS Universal Links по-прежнему задаются в проектах соответствующих платформ.
Destination с локальным объектом процесса помечайте sessionOnly: у него нет внешнего URI и он не восстанавливается после перезапуска.