Android Jetpack Compose中使用hiltViewModel()遇未解析引用问题求助
Android Jetpack Compose中使用hiltViewModel()遇未解析引用问题求助
各位好,我现在在Jetpack Compose项目里尝试用Hilt的hiltViewModel()来注入ViewModel,但是一直提示“unresolved reference”错误,项目同步是成功的,就是代码里标红报错。下面是我的View、ViewModel&数据库相关代码,还有build配置,麻烦大家帮忙看看哪里出问题了?
1. Composable View代码
@Composable fun Screen(model: Model = hiltViewModel()) { // 这里提示unresolved reference: hiltViewModel }
2. 数据层&ViewModel&Hilt模块代码(Data.kt)
import android.content.Context import androidx.lifecycle.ViewModel import androidx.room.Dao import androidx.room.Database import androidx.room.Entity import androidx.room.PrimaryKey import androidx.room.Query import androidx.room.Room import androidx.room.RoomDatabase import dagger.hilt.InstallIn import dagger.hilt.android.lifecycle.HiltViewModel import dagger.hilt.android.qualifiers.ApplicationContext import dagger.hilt.components.SingletonComponent import javax.inject.Inject import javax.inject.Singleton import dagger.Module import dagger.Provides @Module @InstallIn(SingletonComponent::class) object AppDatabaseModule { @Provides @Singleton fun providesAppDatabase(@ApplicationContext applicationContext: Context, ): AppDatabase = Room.databaseBuilder( context = applicationContext, klass = AppDatabase::class.java, name = "database", ).build() @Provides fun providesDataDao(db: AppDatabase): DataDao = db.dataDao() } @HiltViewModel class Model @Inject constructor(private val dataDao: DataDao) : ViewModel() @Database(entities = [Data::class], version = 1) abstract class AppDatabase: RoomDatabase() { abstract fun dataDao(): DataDao } @Dao interface DataDao { @Query("SELECT * FROM data") suspend fun getAll(): List<Data> } @Entity (tableName = "data") data class Data ( @PrimaryKey val uid: Int, val data: String )
3. App模块build.gradle.kts
import org.gradle.kotlin.dsl.coreLibraryDesugaring import java.lang.module.ModuleFinder.compose plugins { alias(libs.plugins.android.application) alias(libs.plugins.kotlin.android) alias(libs.plugins.kotlin.compose) alias(libs.plugins.ksp) id("com.google.dagger.hilt.android") version "2.56.2" apply false } android { namespace = "com.example.app" compileSdk = 35 defaultConfig { applicationId = "com.example.app" minSdk = 25 targetSdk = 35 versionCode = 1 versionName = "1.0" testInstrumentationRunner = "androidx.test.runner.AndroidJUnitRunner" } 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 = "11" } buildFeatures { compose = true } composeOptions { kotlinCompilerExtensionVersion = "1.5.15" } } val compose_version = "1.8.3" val nav_version = "2.9.0" val room_version = "2.3" val billing_version = "8.0.0" dependencies { implementation(libs.androidx.core.ktx) implementation(libs.androidx.lifecycle.runtime.ktx) implementation(libs.androidx.activity.compose) implementation(platform(libs.androidx.compose.bom)) implementation(libs.androidx.ui) implementation(libs.androidx.ui.graphics) implementation(libs.androidx.material3) implementation(libs.androidx.compose.material3) ksp(libs.room.compiler) implementation(libs.room.ktx) implementation(libs.androidx.material3.window.size.class1.android) implementation(libs.androidx.benchmark.macro) testImplementation(libs.junit) androidTestImplementation(libs.androidx.junit) androidTestImplementation(libs.androidx.espresso.core) androidTestImplementation(platform(libs.androidx.compose.bom)) // androidTestImplementation(libs.androidx.ui.test.junit4) debugImplementation(libs.androidx.ui.tooling) debugImplementation(libs.androidx.ui.test.manifest) implementation("androidx.navigation:navigation-compose") implementation ("androidx.compose.material:material-icons-extended") implementation("androidx.room:room-runtime:$room_version") implementation("org.jetbrains.kotlinx:kotlinx-datetime:0.4.0") implementation("com.android.billingclient:billing:$billing_version") implementation ("com.android.billingclient:billing-ktx:$billing_version") coreLibraryDesugaring("com.android.tools:desugar_jdk_libs:2.0.4") implementation("com.google.dagger:hilt-android:2.56.2") ksp("com.google.dagger:hilt-android-compiler:2.56.2") implementation("androidx.hilt:hilt-navigation-compose") }
4. 项目根build.gradle.kts
plugins { alias(libs.plugins.android.application) apply false alias(libs.plugins.kotlin.android) apply false alias(libs.plugins.kotlin.compose) apply false alias(libs.plugins.ksp) apply false }
5. libs.versions.toml(部分内容)
[versions] agp = "8.10.1" kotlin = "2.0.21" coreKtx = "1.16.0" junit = "4.13.2"
我自己初步排查的几个方向,也请大家帮忙验证
- 最容易漏的导入问题:是不是Composable文件没加
import androidx.hilt.navigation.compose.hiltViewModel?我刚才检查好像确实没加这个导入,这应该是个大问题! - Hilt初始化问题:我发现我没写带
@HiltAndroidApp的自定义Application,Hilt容器没初始化的话,hiltViewModel()肯定没法工作吧? - 插件配置问题:App模块的plugins里我写了
id("com.google.dagger.hilt.android") version "2.56.2" apply false,是不是应该直接应用插件而不是apply false? - 版本兼容性:Kotlin 2.0.21搭配Compose Compiler 1.5.15会不会有版本冲突?毕竟Compose Compiler对Kotlin版本匹配要求很严。
麻烦各位帮忙看看这些点是不是命中了问题,或者还有其他我没注意到的地方?
内容来源于stack exchange
相关产品推荐
相关产品推荐

