kotlinviewmodelandroid-viewmodelkotlin-multiplatformcompose-multiplatform

viewModel on Kotlin Multiplatform?


How do I import androidx.lifecycle.viewmodel.compose.viewModel on Kotlin Multiplatform (iOS, web, desktop, Android)?

Attempts:

[versions]
androidx-activityCompose = "1.10.0-alpha02"
androidx-compose-runtime = "1.8.0-alpha03"
androidx-lifecycle-viewmodel = "2.9.0-alpha04"
lifecycleViewmodel = "2.9.0-dev1873"

[libraries]
androidx-activity-compose = { module = "androidx.activity:activity-compose", version.ref = "androidx-activityCompose" }
androidx-lifecycle-viewmodel-compose = { module = "androidx.lifecycle:lifecycle-viewmodel-compose", version.ref = "androidx-lifecycle-viewmodel" }
androidx-runtime = { module = "androidx.compose.runtime:runtime", version.ref = "androidx-compose-runtime" }
jetbrains-lifecycle-viewmodel = { module = "org.jetbrains.androidx.lifecycle:lifecycle-viewmodel", version.ref = "lifecycleViewmodel" }
lifecycle-viewmodel = { module = "androidx.lifecycle:lifecycle-viewmodel", version.ref = "androidx-lifecycle-viewmodel" }

Then in kotlin.sourceSets.commonMain.dependencies of build.gradle:

runtimeOnly(libs.androidx.runtime)
runtimeOnly(libs.androidx.lifecycle.viewmodel.compose)
runtimeOnly(libs.lifecycle.viewmodel)
implementation(libs.jetbrains.lifecycle.viewmodel)

Unfortunately that doesn't work:

Unresolved reference: viewModel


Solution

  • Reusing lifecycleViewmodel = "2.9.0-dev1873", I was able to add:

    lifecycle-viewmodel-compose = { module = 
                     "org.jetbrains.androidx.lifecycle:lifecycle-viewmodel-compose",
                                    version.ref = "lifecycleViewmodel" }
    

    (with implementation(libs.lifecycle.viewmodel.compose) in my kotlin.sourceSets.commonMain.dependencies)