Изучение

URI, deep link и восстановление

Кодирование типизированных Destination, поддержка старых ссылок, восстановление родителей и фильтрация внешних URI.

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

URI, deep link и восстановление

Код функциональности передаёт Destination. Разбор path и query остаётся внутри Route Definition.

Кодирование параметров

dart
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.

Восстановление родителей

dart
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 и он не восстанавливается после перезапуска.