Рецепты

Стек и типизированные результаты

Точные операции для замены Login, очистки сценария, обновления параметров и возврата значения с закрытой страницы.

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

Стек и типизированные результаты

Заменить Login на Home

Было: [Welcome, Login]. Нужно: [Welcome, Home].

dart
await navigation.replaceTop<void>(const HomeDestination());

push оставил бы Login под Home.

Полностью завершить первоначальную настройку

dart
await navigation.replaceAll(<NavigationTarget<Object?>>[
  const NavigationTarget<Object?>(destination: HomeDestination()),
]);

Было [Welcome, Permissions, ProfileSetup], стало [Home].

Оставить Cart и удалить шаги Checkout

dart
navigation.pushAndRemoveUntil<void>(
  const ReceiptDestination(),
  retain: const NavigationRouteIdMatcher(NavigationRouteId('cart')),
);

[Home, Cart, Address, Payment] превращается в [Home, Cart, Receipt].

Обновить Product без завершения Ticket

dart
await navigation.reconfigureTop<void>(
  const ProductDestination(productId: 'keyboard-43'),
);

replaceTop завершает старый Entry, а reconfigureTop сохраняет тот же NavigationEntryId и ожидающий результата Ticket.

Вернуть Address

dart
final ticket = navigation.push<Address?>(const AddressPickerDestination());
final completion = await ticket.completed;
if (completion case NavigationPopped<Address?>(:final result)) {
  checkout.setAddress(result);
}

На странице выбора адреса вызовите context.readNavigation.pop(result: selectedAddress). NavigationRemoved означает, что Entry удалён перестройкой стека, а не обычным pop с null.