
Implements a custom navigation system using viewpager for swipe-back navigation between screens. Supports route definition with parameters, NavGraph creation, and parameter access in composables.
CSNavigation (Compose Swipe Navigation) implement a custom navigation system based on viewpager to allow swipe-back navigation between screens.
Start by creating your routes. You can define routes with or without parameters.
β Route Without Parameters
data object RouteWithoutParameter : Route()
β Route With Parameters
data class RouteWithParameter(
override val argument: Argument
) : RouteWithArgument(
argument
) {
class Argument(
val property: String
) : RouteArgument()
}
After defining routes, create the navigation system and define a mapping between Route and your Screen:
NavigationSystem(
navigator = PagerNavigator(),
starterPage = MainRoute,
routes = object : Routes {
@Composable
override fun toScreen(route: Route) {
when (route) {
is TicketMainRoute -> MainScreen()
is TicketDetailRoute -> TicketDetailScreen(ticket = route.argument.ticket)
else -> throw IllegalStateException()
}
}
}
)
To navigate between screens, use the navigate function from the Navigator, passing the target route as a parameter.
β Navigating With Parameters
navigator.navigate(
OtherRoute(
parameter = RouteWithArgument.MyArgument(
"Value of parameter"
)
)
)
β Navigating Without Parameters
navigator.navigate(
OtherRouteWithoutPrameter()
)
Once navigated, use the parameters inside your Composable function:
@Composable
fun OtherRoute(
param: String, //or your type
) {
Scaffold {
Column {
Text("Item name: ${param}")
Button(
onClick = {}
) { }
}
}
}
CSNavigation (Compose Swipe Navigation) implement a custom navigation system based on viewpager to allow swipe-back navigation between screens.
Start by creating your routes. You can define routes with or without parameters.
β Route Without Parameters
data object RouteWithoutParameter : Route()
β Route With Parameters
data class RouteWithParameter(
override val argument: Argument
) : RouteWithArgument(
argument
) {
class Argument(
val property: String
) : RouteArgument()
}
After defining routes, create the navigation system and define a mapping between Route and your Screen:
NavigationSystem(
navigator = PagerNavigator(),
starterPage = MainRoute,
routes = object : Routes {
@Composable
override fun toScreen(route: Route) {
when (route) {
is TicketMainRoute -> MainScreen()
is TicketDetailRoute -> TicketDetailScreen(ticket = route.argument.ticket)
else -> throw IllegalStateException()
}
}
}
)
To navigate between screens, use the navigate function from the Navigator, passing the target route as a parameter.
β Navigating With Parameters
navigator.navigate(
OtherRoute(
parameter = RouteWithArgument.MyArgument(
"Value of parameter"
)
)
)
β Navigating Without Parameters
navigator.navigate(
OtherRouteWithoutPrameter()
)
Once navigated, use the parameters inside your Composable function:
@Composable
fun OtherRoute(
param: String, //or your type
) {
Scaffold {
Column {
Text("Item name: ${param}")
Button(
onClick = {}
) { }
}
}
}