androidkotlinandroid-studioandroid-jetpack-composeandroid-jetpack-navigation

Navigation in Jetpack Compose: "cannot find a parameter with this name: startDestination" for the NavHost class


My current question is about why does the error message in the title appears? I am following a tutorial on youtube of Plillip Lackner, trying to understand how navigation between multiple screens can be implemented, and checked if I have the same updated dependencies and it seems like they are correct. However I get this error message and I have a bit of a hard time figuring out what is wrong in how I configured the project. Any advice would help. My guess is that it is probably about a difference between different versions of the class.

enter image description here

And this is the app build.gradle.kts file:

plugins {
    id("com.android.application")
    id("org.jetbrains.kotlin.android")
}

android {
    namespace = "com.example.navigationforbeginners"
    compileSdk = 34

    defaultConfig {
        applicationId = "com.example.navigationforbeginners"
        minSdk = 24
        targetSdk = 34
        versionCode = 1
        versionName = "1.0"

        testInstrumentationRunner = "androidx.test.runner.AndroidJUnitRunner"
        vectorDrawables {
            useSupportLibrary = true
        }
    }

    buildTypes {
        release {
            isMinifyEnabled = false
            proguardFiles(
                getDefaultProguardFile("proguard-android-optimize.txt"),
                "proguard-rules.pro"
            )
        }
    }
    compileOptions {
        sourceCompatibility = JavaVersion.VERSION_1_8
        targetCompatibility = JavaVersion.VERSION_1_8
    }
    kotlinOptions {
        jvmTarget = "1.8"
    }
    buildFeatures {
        compose = true
    }
    composeOptions {
        kotlinCompilerExtensionVersion = "1.5.1"
    }
    packaging {
        resources {
            excludes += "/META-INF/{AL2.0,LGPL2.1}"
        }
    }
}

dependencies {

    implementation("androidx.core:core-ktx:1.12.0")
    implementation("androidx.appcompat:appcompat:1.6.1") //
    implementation("com.google.android.material:material:1.11.0") //
    implementation("androidx.lifecycle:lifecycle-runtime-ktx:2.7.0")
    implementation("androidx.activity:activity-compose:1.8.2")
    implementation(platform("androidx.compose:compose-bom:2023.08.00"))
    implementation("androidx.compose.ui:ui:1.6.2")//
    implementation("androidx.compose.ui:ui-graphics")
    implementation("androidx.compose.ui:ui-tooling-preview")
    implementation("androidx.compose.material3:material3:1.6.1") //
    implementation("androidx.compose.ui:ui-tooling:1.6.2") //
    testImplementation("junit:junit:4.13.2")
    androidTestImplementation("androidx.test.ext:junit:1.1.5")
    androidTestImplementation("androidx.test.espresso:espresso-core:3.5.1")
    androidTestImplementation(platform("androidx.compose:compose-bom:2023.08.00"))
    androidTestImplementation("androidx.compose.ui:ui-test-junit4:1.6.2") //
    debugImplementation("androidx.compose.ui:ui-test-manifest")

    implementation("androidx.navigation:navigation-compose:2.7.7")
} 

Solution

  • You need to also provide the builder parameter, the last parameter that you use to map routes to screens.

    Just add that parameter by adding an empty pair of curly braces after the closing parenthesis, like this:

    NavHost(navController = navController, startDestination = Screen.MainScreen.route) {
    
    }
    

    Now the compiler can recognize what NavHost function you want to call and also accepts the startDestination parameter.