Skip to main content

cranpose_navigation/
lib.rs

1//! Navigation for Cranpose: a typed back stack, a `NavHost` that shows its top
2//! screen, and a view model store per screen.
3//!
4//! | Android | Cranpose |
5//! |---|---|
6//! | `rememberNavController()` + `startDestination` | [`rememberNavController`], a `Copy` [`NavController`] |
7//! | `NavHost(navController) { composable<Route> { } }` | [`NavHost`] with a `match` on the route |
8//! | `NavHost(enterTransition, exitTransition)` | [`NavHostWith`] |
9//! | `navigate(route)`, `popBackStack()`, `navigateUp()` | [`NavController::navigate`], [`NavController::pop_back_stack`], [`NavController::navigate_up`] |
10//! | `navigate(route) { popUpTo(..) { inclusive }; launchSingleTop }` | [`NavController::navigate_with`] and [`NavOptions`] |
11//! | `popBackStack(route, inclusive)` | [`NavController::pop_back_stack_to`] |
12//! | `currentBackStackEntryAsState()`, `currentBackStack` | [`NavController::current_route`], [`NavController::back_stack`] |
13//! | `viewModel()` scoped to a `NavBackStackEntry` | `cranpose_coroflow::viewModel` inside a screen |
14//!
15//! A route is any `Clone + PartialEq` value, usually an enum whose variants
16//! carry the screen's arguments.
17
18#![expect(non_snake_case)]
19
20mod controller;
21mod host;
22
23pub use controller::{NavController, NavOptions, rememberNavController};
24pub use host::{NavHost, NavHostWith};