Hi everyone, I don't know what I'm doing wrong, bu...
# compose
s
Hi everyone, I don't know what I'm doing wrong, but configuration changes such as full UI refreshes or Locale changes are causing my
val languagePageViewModel = koinViewModel<LanguagePageViewModel>()
to be recreated each time. Can anyone help me solve this issue? More context is in the threads.
Copy code
import org.jetbrains.kotlin.gradle.dsl.JvmTarget

plugins {
    alias(libs.plugins.kotlin.multiplatform)
    alias(libs.plugins.android.kotlin.multiplatform.library)
    alias(libs.plugins.compose.multiplatform)
    alias(libs.plugins.compose.compiler)
    alias(libs.plugins.kotlinx.serialization)
}

kotlin {
    androidLibrary {
        namespace = libs.versions.features.userOnboarding.androidLibrary.namespace.get()
        compileSdk = libs.versions.features.userOnboarding.androidLibrary.compileSdk.get().toInt()
        minSdk = libs.versions.features.userOnboarding.androidLibrary.minSdk.get().toInt()
    }

    jvm("desktop") {
        compilerOptions {
            jvmTarget = JvmTarget.JVM_21
        }
    }

    iosX64()
    iosArm64()
    iosSimulatorArm64()

    sourceSets {
        val desktopMain by getting
        androidMain.dependencies {
            implementation(libs.compose.multiplatform.ui.tooling.preview)
        }
        commonMain.dependencies {
            implementation(libs.localina)
            implementation(libs.kotlinx.serialization.json)
            implementation(libs.bundles.koin.multiplatform)
            implementation(libs.bundles.compose.multiplatform.lifecycle)
            implementation(libs.bundles.compose.multiplatform)
            implementation(projects.designSystem.compose)
            implementation(projects.shared)
        }
        commonTest.dependencies {
            implementation(libs.kotlin.test)
        }
        desktopMain.dependencies {
            implementation(libs.kotlinx.coroutines.swing)
        }
    }
}

compose.resources {
    generateResClass = never
}

// Custom build directory
layout.buildDirectory.set(file("$rootDir/.build/features/user-onboarding"))
build.gradle.kts
Copy code
[versions]
# Library and plugin versions
kotlin = "2.2.21"
androidGradlePlugin = "8.13.0"
activity = "1.11.0"
splashScreen = "1.0.1"
composeMultiplatform = "1.9.2"
material3 = "1.9.0"
material3Adaptive = "1.2.0"
navigation = "2.9.1"
hotReload = "1.0.0-rc02"
lifecycle = "2.9.5"
serialization = "1.9.0"
coroutines = "1.10.2"
koin = "4.1.1"
datastore = "1.1.7"
localina = "1.0.0-alpha2"

[libraries]
kotlin-test = { module = "org.jetbrains.kotlin:kotlin-test", version.ref = "kotlin" }
activity-compose = { module = "androidx.activity:activity-compose", version.ref = "activity" }
core-splashscreen = { module = "androidx.core:core-splashscreen", version.ref = "splashScreen" }
compose-multiplatform-runtime = { module = "org.jetbrains.compose.runtime:runtime", version.ref = "composeMultiplatform" }
compose-multiplatform-resources = { module = "org.jetbrains.compose.components:components-resources", version.ref = "composeMultiplatform" }
compose-multiplatform-components-ui-tooling-preview = { module = "org.jetbrains.compose.components:components-ui-tooling-preview", version.ref = "composeMultiplatform" }
compose-multiplatform-ui-tooling-preview = { module = "org.jetbrains.compose.ui:ui-tooling-preview", version.ref = "composeMultiplatform" }
compose-multiplatform-foundation = { module = "org.jetbrains.compose.foundation:foundation", version.ref = "composeMultiplatform" }
compose-multiplatform-material3 = { module = "org.jetbrains.compose.material3:material3", version.ref = "material3" }
compose-multiplatform-material3-adaptive = { module = "org.jetbrains.compose.material3.adaptive:adaptive", version.ref = "material3Adaptive" }
compose-multiplatform-navigation = { module = "org.jetbrains.androidx.navigation:navigation-compose", version.ref = "navigation" }
compose-multiplatform-viewmodel = { module = "org.jetbrains.androidx.lifecycle:lifecycle-viewmodel-compose", version.ref = "lifecycle" }
compose-multiplatform-lifecycle-runtime = { module = "org.jetbrains.androidx.lifecycle:lifecycle-runtime-compose", version.ref = "lifecycle" }
kotlinx-serialization-json = { module = "org.jetbrains.kotlinx:kotlinx-serialization-json", version.ref = "serialization" }
kotlinx-coroutines-swing = { module = "org.jetbrains.kotlinx:kotlinx-coroutines-swing", version.ref = "coroutines" }
koin-core = { module = "io.insert-koin:koin-core", version.ref = "koin" }
koin-android = { module = "io.insert-koin:koin-android", version.ref = "koin" }
koin-compose = { module = "io.insert-koin:koin-compose", version.ref = "koin" }
koin-compose-viewmodel = { module = "io.insert-koin:koin-compose-viewmodel", version.ref = "koin" }
datastore = { module = "androidx.datastore:datastore", version.ref = "datastore" }
datastore-preferences = { module = "androidx.datastore:datastore-preferences", version.ref = "datastore" }
localina = { module = "io.github.sudarshanmhasrup.localina:localina", version.ref = "localina" }

[bundles]
compose-multiplatform = [
    "compose-multiplatform-runtime", "compose-multiplatform-resources", "compose-multiplatform-components-ui-tooling-preview",
    "compose-multiplatform-foundation", "compose-multiplatform-material3", "compose-multiplatform-material3-adaptive",
    "compose-multiplatform-navigation"
]
compose-multiplatform-lifecycle = ["compose-multiplatform-viewmodel", "compose-multiplatform-lifecycle-runtime"]
koin-multiplatform = ["koin-core", "koin-compose", "koin-compose-viewmodel"]
koin-android = ["koin-core", "koin-android"]
datastore = ["datastore", "datastore-preferences"]

[plugins]
kotlin-multiplatform = { id = "org.jetbrains.kotlin.multiplatform", version.ref = "kotlin" }
kotlin-android = { id = "org.jetbrains.kotlin.android", version.ref = "kotlin" }
android-application = { id = "com.android.application", version.ref = "androidGradlePlugin" }
android-kotlin-multiplatform-library = { id = "com.android.kotlin.multiplatform.library", version.ref = "androidGradlePlugin" }
compose-multiplatform = { id = "org.jetbrains.compose", version.ref = "composeMultiplatform" }
compose-compiler = { id = "org.jetbrains.kotlin.plugin.compose", version.ref = "kotlin" }
compose-hot-reload = { id = "org.jetbrains.compose.hot-reload", version.ref = "hotReload" }
kotlinx-serialization = { id = "org.jetbrains.kotlin.plugin.serialization", version.ref = "kotlin" }
version catalog