Изучение
Destination и Route Definition
Типизированное намерение навигации отдельно от создания Flutter Page и сериализации URI.
v0.1.0-dev.2Начальный уровень
Destination и Route Definition
NavigationDestination<R> представляет типизированный запрос. Параметр R задаёт значение, которое может вернуться после извлечения Entry из стека.
dart
final class ProductDestination extends NavigationDestination<bool> {
const ProductDestination({required this.productId});
final String productId;
}
NavigationRouteDefinition<D, R> связывает запрос с постоянным идентификатором роута, построением страницы и опциональным URI-кодеком.
dart
NavigationRouteDefinition<ProductDestination, bool>(
id: const NavigationRouteId('product'),
pageBuilder: (context, destination, entry) => ProductPage(
productId: destination.productId,
),
uriCodec: CallbackNavigationUriCodec<ProductDestination>(
pattern: '/products/:productId',
encoder: (value) => Uri(path: '/products/${value.productId}'),
decoder: (match) => ProductDestination(
productId: match.path('productId'),
),
),
)
Прикладной код создаёт ProductDestination, а не Map параметров. Только кодек преобразует типизированные значения в путь, строку запроса или фрагмент URI. NavigationRouteId, NavigationMountId, NavigationScopeId и создаваемый во время выполнения NavigationEntryId описывают разные сущности — это исключает коллизии ключей и неоднозначность стека.