File: settings.gradle.kts
dependencyResolutionManagement {
repositories {
// ...
mavenCentral()
// ...
}
}
File: shared/build.gradle.kts
kotlin {
sourceSets {
commonMain.dependencies {
implementation("com.rakangsoftware.tiny:tiny-navigation:0.0.4")
implementation(compose.runtime)
implementation(compose.foundation)
implementation(compose.material)
implementation(compose.ui)
}
}
}
File: Navigation.kt
sealed class Screen(val route: String) {
data object Splash : Screen("splash")
data object Home : Screen("home/{id}") {
fun getRoute(id: Long) = "home/$id"
}
}
@Composable
fun RootNavigation() {
val controller = rememberNavController()
NavigationHost(
controller, Screen.Splash.route
) {
addSplashScreen(controller)
addHomeScreen(controller)
}
}
fun NavigationGraphBuilder.addSplashScreen(controller: NavController) {
composable(
Screen.Splash.route,
) {
val viewModel = getViewModel(
key = "splash-screen",
factory = viewModelFactory {
SplashViewModel()
}
)
SplashScreen(
viewModel = viewModel
) {
controller.navigate(Screen.Home.route)
}
}
}
fun NavigationGraphBuilder.addHomeScreen(controller: NavController) {
composable(Screen.Home.route) {
val id = it.bundle.getInt("id")
HomeScreen()
}
}