Route & Page
Route descriptors, settings, transitions, and declarative pages.
Route
| Type | Purpose |
|---|---|
Route | Stack entry with settings, presentation, and transition |
RouteSettings | Name and arguments payload |
RouteTransition | Fade / slide / scale / none animations |
RoutePresentation | Stacked vs overlay-hosted placement |
RouteResult | Completion payloads returned on pop |
RestorableRoute | Persistable route handle |
Page | Keyed declarative route description |
PageRouteBuilder | Page with custom transition |
Overlay / OverlayEntry | Imperative overlay content |
RouteOutlet | Mount a Navigator as stack content |
use incular::prelude::*;
fn main() {
let registry = RouteRegistry::new();
println!("resolved: {}", registry.resolve("/settings").is_some());
let id = RestorableRouteId::new("counter").expect("route id");
println!("route id: {}", id.as_str());
let scope = RouteScopeKey::new("main").expect("scope key");
println!("scope: {}", scope.as_str());
}Navigator::push(route) -> RouteId, push_page(page),
replace(route) -> Option<Route>, lifetime_of(id) -> Option<RouteLifetime>
(RouteLifetimeSubscription keeps on_ended callbacks alive).
Registry and restorable routes
RouteRegistry::new() owns path builders; register, resolve,
navigate, register_restorable, navigate_restorable, and
restore_navigator drive declarative and restorable stacks as exercised in
the runnable program above.
RestorableRouteId (stable persisted id; Empty / ContainsControlCharacter
rejected, RestorableRouteIdError), RestorableRouteBuildError (InvalidArguments / BuildFailed),
RestorableRouteRegistrationError (invalid / duplicate id),
RestorableNavigationError (UnknownRoute / BuildFailed).
RouteScopeKey (single-segment stable key) with RouteScopeKeyError.
PageStorage / PageStorageBucket (write_state / read_state /
remove_state / clear) / PageStorageKey / PageStorageIdentifier keep
keyed storage independent of the element tree.
Outlet mounting: OutletId, OutletPlacement::of(presentation, visible)
(Stacked vs ExternalOverlay), OutletError, OutletAttachError
(SelfAttachment / Cycle / AlreadyAttached); per-route focus via
RouteFocusOwner / RouteFocusState (save_focused, restore_saved,
forget).
Page
Declarative route descriptions reconciled by key in set_pages:
use incular::prelude::*;
fn main() {
let nav = Navigator::new();
let page = Page::new("home", Text::new("Home"));
nav.set_pages(vec![page]).expect("pages");
println!("can pop: {}", nav.can_pop());
}Overlay / OverlayEntry host imperative overlay content;
RouteLifetime scopes per-route tasks via
RouteTaskBinding::bind(&scope, &lifetime).
RouteOutlet mounts one Navigator as stack content with per-route focus and
task bindings.
Related: Navigator,
Restoration.