# HG changeset patch # User Da Risk # Date 1745785474 14400 # Node ID 1e50097cdbde77c0035603f162afbc8d33684ab1 # Parent 5e249499bb3e576417162fda0078af033d780084 ui:material2: use type safe navigation diff -r 5e249499bb3e -r 1e50097cdbde ui/material2/build.gradle.kts --- a/ui/material2/build.gradle.kts Sun Apr 27 16:19:28 2025 -0400 +++ b/ui/material2/build.gradle.kts Sun Apr 27 16:24:34 2025 -0400 @@ -26,6 +26,7 @@ kotlin("multiplatform") alias(libs.plugins.org.jetbrains.kotlin.compose.compiler) alias(libs.plugins.org.jetbrains.compose.multiplatform) + alias(libs.plugins.org.jetbrains.kotlinx.serialization) id("com.geekorum.build.source-license-checker") `maven-publish` } @@ -61,7 +62,6 @@ implementation(compose.components.resources) implementation(libs.org.jetbrains.compose.material.icons.core) implementation(libs.org.jetbrains.androidx.navigation.compose) - implementation(libs.org.jetbrains.androidx.core.uri) implementation(libs.org.jetbrains.androidx.lifecycle.viewmodel.compose) } diff -r 5e249499bb3e -r 1e50097cdbde ui/material2/src/commonMain/kotlin/com/geekorum/aboutoss/ui/material/OpenSourceDependenciesNavHost.kt --- a/ui/material2/src/commonMain/kotlin/com/geekorum/aboutoss/ui/material/OpenSourceDependenciesNavHost.kt Sun Apr 27 16:19:28 2025 -0400 +++ b/ui/material2/src/commonMain/kotlin/com/geekorum/aboutoss/ui/material/OpenSourceDependenciesNavHost.kt Sun Apr 27 16:24:34 2025 -0400 @@ -22,12 +22,20 @@ package com.geekorum.aboutoss.ui.material import androidx.compose.runtime.Composable -import androidx.core.uri.UriUtils import androidx.navigation.compose.NavHost import androidx.navigation.compose.composable import androidx.navigation.compose.rememberNavController -import androidx.savedstate.read +import androidx.navigation.toRoute import com.geekorum.aboutoss.ui.common.OpenSourceLicensesViewModel +import kotlinx.serialization.Serializable + +@Serializable +private object DependenciesList + +@Serializable +private data class DependencyLicense( + val dependency: String +) @Composable fun OpenSourceDependenciesNavHost( @@ -35,20 +43,19 @@ navigateUp: () -> Unit ) { val navController = rememberNavController() - NavHost(navController, startDestination = "dependencies") { - composable("dependencies") { + NavHost(navController, startDestination = DependenciesList) { + composable { OpenSourceDependenciesListScreen( viewModel = openSourceLicensesViewModel, onDependencyClick = { - navController.navigate("dependency_license/${UriUtils.encode(it)}") + navController.navigate(DependencyLicense(it)) }, onUpClick = navigateUp ) } - composable("dependency_license/{dependency}") { - val dependency = requireNotNull(it.arguments?.read { - getString("dependency") - }) + composable { + val route = it.toRoute() + val dependency = route.dependency OpenSourceLicenseScreen( viewModel = openSourceLicensesViewModel, dependency = dependency,