Рецепты
Deep link и восстановление
Типизированные параметры URI, восстановление родительских страниц, поддержка старых URL и Route, существующие только в текущей Session.
Deep link и восстановление
Преобразовать Product в /products/42
uriCodec: CallbackNavigationUriCodec<ProductDestination>(
pattern: '/products/:id',
encoder: (value) => Uri(path: '/products/${value.productId}'),
decoder: (match) => ProductDestination(match.path('id')),
),
Функциональный код передаёт ProductDestination и не разбирает URI самостоятельно.
Добавить родителей для прямой ссылки
stackPlanBuilder: (product) => <NavigationTarget<Object?>>[
const NavigationTarget<Object?>(destination: HomeDestination()),
const NavigationTarget<Object?>(destination: CatalogDestination()),
NavigationTarget<Object?>(destination: product),
],
Прямой результат: [Home, Catalog, Product].
Сохранить поддержку старого /item/42
Добавьте CallbackNavigationUriAlias с шаблоном /item/:id. Alias используется только при чтении ссылки, поэтому NavigationUriCodec продолжит создавать канонический URL /products/:id.
Не восстанавливать Route с объектом текущего процесса
Укажите restorationPolicy: NavigationRestorationPolicy.sessionOnly и не задавайте URI codec. Это подходит Route, который содержит controller или другой объект, который нельзя восстановить после перезапуска. Экран существует только в текущей Session.
Исправить URL без нового шага Back
Чтобы исправить URL без нового шага в истории браузера, используйте historyMode: NavigationHistoryMode.replace.