pub struct PushOptions<State>where
State: 'static,{ /* private fields */ }Expand description
Options for NavigatorController::push_with_options, carrying a pushed
page’s opacity, back-press BackPolicy, optional per-op transition
override, optional result callback, and (for a
DismissAnimated overlay) the shared
dismiss-signal cell the navigator bumps on a back request.
Construct with opaque/transparent,
then chain the builder setters. The existing push* methods are unchanged —
they push with BackPolicy::Pop and no dismiss signal.
Implementations§
Source§impl<State> PushOptions<State>where
State: 'static,
impl<State> PushOptions<State>where
State: 'static,
Sourcepub fn opaque() -> PushOptions<State>
pub fn opaque() -> PushOptions<State>
Options for an opaque page (the page below is culled while covered).
Defaults: BackPolicy::Pop, navigator-default transition, no result
callback, no dismiss signal.
Sourcepub fn transparent() -> PushOptions<State>
pub fn transparent() -> PushOptions<State>
Options for a transparent page (e.g. a dialog/sheet/palette overlay —
the page below stays visible). Same defaults as opaque
otherwise.
Sourcepub fn back(self, policy: BackPolicy) -> PushOptions<State>
pub fn back(self, policy: BackPolicy) -> PushOptions<State>
Set the page’s back-press BackPolicy (default BackPolicy::Pop).
Sourcepub fn transition(self, spec: TransitionSpec) -> PushOptions<State>
pub fn transition(self, spec: TransitionSpec) -> PushOptions<State>
Override the navigator’s default transition for this push only.
Sourcepub fn on_result(
self,
callback: impl Fn(&mut State, PopResult) + 'static,
) -> PushOptions<State>
pub fn on_result( self, callback: impl Fn(&mut State, PopResult) + 'static, ) -> PushOptions<State>
Register a result callback invoked with &mut State when this page is
later popped (carrying the pop’s PopResult) — the same delivery the
push_for_result path uses.
Sourcepub fn dismiss_signal(self, signal: Rc<Cell<u64>>) -> PushOptions<State>
pub fn dismiss_signal(self, signal: Rc<Cell<u64>>) -> PushOptions<State>
Supply the shared generation cell the navigator increments when a
DismissAnimated back press routes to this
page (see BackPolicy’s observation seam). Ignored for the other
policies.
Sourcepub fn on_visibility(
self,
f: impl Fn(PageVisibility) + 'static,
) -> PushOptions<State>
pub fn on_visibility( self, f: impl Fn(PageVisibility) + 'static, ) -> PushOptions<State>
Observe this page’s PageVisibility: fired once at push (with
Current) and on every subsequent change,
never twice with the same value. This is the seam a screen
pauses/resumes polling, a timer, or a camera session from.
§Why it is a callback, not a published cell
A covered page is neither painted nor (under
NavigatorView::cull_covered_builds) rebuilt, so it has no pass in
which to poll anything. The seam therefore has to push. It is shaped
exactly like on_result/
dismiss_signal: a plain Rc<dyn Fn> slot, no
signal — frust-widgets is reactive-free.
§No &mut State
The callback receives no &mut State, unlike
on_result. It fires from a rebuild (a BuildCtx),
which carries no erased app state, and it fires synchronously there:
nothing is queued, so a covered page learns it is covered on the frame it
happens. Capture what you need (a signal, an Rc<Cell<_>>, a controller
handle) in the closure instead.
(on_result does defer — it needs &mut State — but it is no longer
waiting on user input to be delivered: the rebuild that queues it also
dispatches the InputEvent::Housekeeping broadcast that flushes it, so
both seams now land on the same frame. See the module docs.)
§“No cleanup on cover” is the contract, not a bug
A covering push does not fire the page’s on_cleanup and must never
start to: the page stays mounted so its widget state survives the cover
(the retained-page-state guarantee the whole navigator rests on — see the
module docs’ paint-culling section). This seam exists precisely so
a page can release its own resources on
Covered and re-acquire them on
Current, without the navigator disposing
anything.
Calling back into the NavigatorController from here is safe: a
push/pop only records an op, drained at the next rebuild.
Sourcepub fn route(self, location: Location) -> PushOptions<State>
pub fn route(self, location: Location) -> PushOptions<State>
Stamp this page’s route identity (R-B1): the Location it was
pushed with, published on the navigator’s RouteStack and never
derived from depth. Omit for a page pushed as a bare builder (an
overlay/dialog) — it then publishes a None entry, which
RouteStack::current_route skips.
Sourcepub fn pop_swipe(self, enabled: bool) -> PushOptions<State>
pub fn pop_swipe(self, enabled: bool) -> PushOptions<State>
Override this page’s edge-swipe eligibility, ranked above every other
gesture-policy slot: page → navigator explicit
(NavigatorView::pop_swipe) → platform
(NavigatorView::platform_pop_swipe) → preset-derived default. Still
subject to BackPolicy: a DismissAnimated
or Veto page never arms the gesture regardless of
this override (see NavigatorWidget::swipe_armable).
Auto Trait Implementations§
impl<State> !RefUnwindSafe for PushOptions<State>
impl<State> !Send for PushOptions<State>
impl<State> !Sync for PushOptions<State>
impl<State> !UnwindSafe for PushOptions<State>
impl<State> Freeze for PushOptions<State>
impl<State> Unpin for PushOptions<State>
impl<State> UnsafeUnpin for PushOptions<State>
Blanket Implementations§
Source§impl<T> BorrowMut<T> for Twhere
T: ?Sized,
impl<T> BorrowMut<T> for Twhere
T: ?Sized,
Source§fn borrow_mut(&mut self) -> &mut T
fn borrow_mut(&mut self) -> &mut T
impl<ST, DT> CastableFrom<ST, Initialized, Initialized> for DT
impl<ST, DT> CastableFrom<ST, Uninit, Uninit> for DT
Source§impl<T> Downcast for Twhere
T: Any,
impl<T> Downcast for Twhere
T: Any,
Source§fn into_any(self: Box<T>) -> Box<dyn Any>
fn into_any(self: Box<T>) -> Box<dyn Any>
Box<dyn Trait> (where Trait: Downcast) to Box<dyn Any>. Box<dyn Any> can
then be further downcast into Box<ConcreteType> where ConcreteType implements Trait.Source§fn into_any_rc(self: Rc<T>) -> Rc<dyn Any>
fn into_any_rc(self: Rc<T>) -> Rc<dyn Any>
Rc<Trait> (where Trait: Downcast) to Rc<Any>. Rc<Any> can then be
further downcast into Rc<ConcreteType> where ConcreteType implements Trait.Source§fn as_any(&self) -> &(dyn Any + 'static)
fn as_any(&self) -> &(dyn Any + 'static)
&Trait (where Trait: Downcast) to &Any. This is needed since Rust cannot
generate &Any’s vtable from &Trait’s.Source§fn as_any_mut(&mut self) -> &mut (dyn Any + 'static)
fn as_any_mut(&mut self) -> &mut (dyn Any + 'static)
&mut Trait (where Trait: Downcast) to &Any. This is needed since Rust cannot
generate &mut Any’s vtable from &mut Trait’s.