У меня есть эта базовая реализация ViewModel (которая представляет собой открытый класс), который находится в отдельном модуле под названием core:presentation, а затем у меня есть ViewModel для экрана, который вызывает эту BaseViewModel, которая находится в другом модуле под названием Feature:list:ui. Сначала я покажу ошибку, затем покажу код и соответствующие файлы build.gradle.kts. Я также использую Hilt для DI.
Ошибка
Невозможно разрешить супертипы следующих классов. Убедитесь, что у вас есть необходимые зависимости в пути к классам:
class com.mvitemplate.feature.list.ui.ListScreenViewModel, неразрешенные супертипы: com.mvitemplate.core.presentation.mvi.FlowViewModel
Добавление -Xextended Аргумент -compiler-checks может предоставить дополнительную информацию.
BaseViewModel в базовом модуле представления и его build.gradle.kts
Код: Выделить всё
import androidx.lifecycle.ViewModel
import kotlinx.coroutines.CoroutineScope
import kotlinx.coroutines.Dispatchers
import kotlinx.coroutines.SupervisorJob
import kotlinx.coroutines.cancel
import kotlinx.coroutines.launch
open class FlowViewModel constructor(
interactor: Interactor,
private val reducer: Reducer,
initialState: ViewState,
private val coroutineScope: CoroutineScope = CoroutineScope(SupervisorJob() +
Dispatchers.Main.immediate)
): ViewModel(), BaseViewModel {
// Took out some code but doesn't really affect this issue as I still encountered them
even after taking this said code out.
override fun emit(intent: Intent) {
coroutineScope.launch {
// Do something...
}
}
override fun onCleared() {
super.onCleared()
coroutineScope.cancel()
}
}
// Build.gradle.kts
plugins {
alias(libs.plugins.android.library)
alias(libs.plugins.jetbrains.kotlin.android)
alias(libs.plugins.dagger.hilt.android)
alias(libs.plugins.google.devtools.ksp)
}
android {
namespace = "com.mvitemplate.core"
compileSdk = 34
defaultConfig {
minSdk = 24
testInstrumentationRunner = "androidx.test.runner.AndroidJUnitRunner"
consumerProguardFiles("consumer-rules.pro")
}
buildTypes {
release {
isMinifyEnabled = false
proguardFiles(
getDefaultProguardFile("proguard-android-optimize.txt"),
"proguard-rules.pro"
)
}
}
compileOptions {
sourceCompatibility = JavaVersion.VERSION_17
targetCompatibility = JavaVersion.VERSION_17
}
kotlinOptions {
jvmTarget = "17"
}
}
dependencies {
implementation(libs.androidx.core.ktx)
implementation(libs.androidx.appcompat)
implementation(libs.androidx.compose.runtime)
implementation(libs.material)
testImplementation(libs.junit)
androidTestImplementation(libs.androidx.junit)
androidTestImplementation(libs.androidx.espresso.core)
implementation(libs.kotlinx.coroutines.android)
implementation(libs.kotlinx.coroutines.core)
// hilt
implementation(libs.hilt.android)
ksp(libs.hilt.android.compiler)
}
Код: Выделить всё
import com.mvitemplate.core.presentation.mvi.FlowViewModel
import com.mvitemplate.core.presentation.mvi.Interactor
import com.mvitemplate.core.presentation.mvi.Reducer
import com.mvitemplate.feature.list.ui.ListScreenContract.Intent
import com.mvitemplate.feature.list.ui.ListScreenContract.Result
import com.mvitemplate.feature.list.ui.ListScreenContract.ViewState
import dagger.hilt.android.lifecycle.HiltViewModel
import javax.inject.Inject
@HiltViewModel
class ListScreenViewModel @Inject constructor(
interactor: Interactor,
reducer: Reducer,
viewState: ViewState
): FlowViewModel(
interactor = interactor,
reducer = reducer,
initialState = viewState
)
// Build.gradle.kts
plugins {
alias(libs.plugins.android.library)
alias(libs.plugins.jetbrains.kotlin.android)
alias(libs.plugins.dagger.hilt.android)
alias(libs.plugins.google.devtools.ksp)
}
android {
namespace = "com.mvitemplate.feature.list.ui"
compileSdk = 34
defaultConfig {
minSdk = 24
testInstrumentationRunner = "androidx.test.runner.AndroidJUnitRunner"
consumerProguardFiles("consumer-rules.pro")
}
buildTypes {
release {
isMinifyEnabled = false
proguardFiles(
getDefaultProguardFile("proguard-android-optimize.txt"),
"proguard-rules.pro"
)
}
}
buildFeatures {
compose = true
}
composeOptions {
kotlinCompilerExtensionVersion = "1.5.1"
}
compileOptions {
sourceCompatibility = JavaVersion.VERSION_17
targetCompatibility = JavaVersion.VERSION_17
}
kotlinOptions {
jvmTarget = "17"
freeCompilerArgs += "-Xextended-compiler-checks"
}
}
dependencies {
implementation(project(":core:presentation"))
implementation(libs.androidx.core.ktx)
implementation(libs.androidx.appcompat)
implementation(libs.androidx.activity.compose)
implementation(platform(libs.androidx.compose.bom))
implementation(libs.androidx.ui)
implementation(libs.androidx.ui.graphics)
implementation(libs.androidx.ui.tooling.preview)
implementation(libs.androidx.material3)
implementation(libs.material)
testImplementation(libs.junit)
androidTestImplementation(libs.androidx.junit)
androidTestImplementation(libs.androidx.espresso.core)
// kotlin coroutines
implementation(libs.kotlinx.coroutines.android)
implementation(libs.kotlinx.coroutines.core)
// navigation
implementation(libs.androidx.navigation.compose)
// hilt
implementation(libs.hilt.android)
ksp(libs.hilt.android.compiler)
}
Подробнее здесь: https://stackoverflow.com/questions/793 ... -make-sure