You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

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"

我自己初步排查的几个方向,也请大家帮忙验证

  1. 最容易漏的导入问题:是不是Composable文件没加import androidx.hilt.navigation.compose.hiltViewModel?我刚才检查好像确实没加这个导入,这应该是个大问题!
  2. Hilt初始化问题:我发现我没写带@HiltAndroidApp的自定义Application,Hilt容器没初始化的话,hiltViewModel()肯定没法工作吧?
  3. 插件配置问题:App模块的plugins里我写了id("com.google.dagger.hilt.android") version "2.56.2" apply false,是不是应该直接应用插件而不是apply false?
  4. 版本兼容性:Kotlin 2.0.21搭配Compose Compiler 1.5.15会不会有版本冲突?毕竟Compose Compiler对Kotlin版本匹配要求很严。

麻烦各位帮忙看看这些点是不是命中了问题,或者还有其他我没注意到的地方?

内容来源于stack exchange

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.04.07 13:29:29