Search code examples
android-jetpack-composeandroid-jetpack-navigation

Navigation Compose Type Safety issue


I'm trying to use type safety feature in Jetpack Navigation Compose, but unfortunatelly I'm not able to use Kotlin's object as a route parameter in NavGraphBuilder.composable

Error is:

Type mismatch. 
Required: String

Related libraries used:

  • org.jetbrains.kotlinx:kotlinx-serialization-core-jvm:1.6.3
  • androidx.navigation:navigation-compose:2.8.0-beta01
  • androidx.compose.runtime:runtime-android:1.7.0-beta01
import androidx.compose.runtime.Composable
import androidx.navigation.compose.NavHost
import androidx.navigation.compose.composable
import androidx.navigation.compose.rememberNavController
import kotlinx.serialization.Serializable

@Composable
fun TestView() {

    val navController = rememberNavController()

    NavHost(navController = navController, startDestination = TestRoute) {
        composable(TestRoute) {} // <-- error
    }
}

@Serializable
object TestRoute

enter image description here

Please help me to understand, what is missing.


Solution

  • The destination is passed in not as a function argument, but as a generic parameter:

    NavHost(controller, startDestination) {
        composable<TestRoute> { Content() } // <-- here
    }