如何使用Hilt在Compose可组合函数中获取ViewModel
Hilt Compose 注入ViewModel解决方案
你不需要为@Composable可组合函数添加@AndroidEntryPoint注解,Hilt官方提供了专门的Compose扩展能力,可以直接在可组合函数内部完成ViewModel的依赖注入,实现方案如下:
1. 添加配套依赖
首先在模块级build配置文件中引入Hilt和Compose的适配依赖,版本需与项目内已有的Hilt、Compose版本保持兼容:
- Groovy格式(build.gradle)
implementation "androidx.hilt:hilt-navigation-compose:1.2.0" - Kotlin DSL格式(build.gradle.kts)
implementation("androidx.hilt:hilt-navigation-compose:1.2.0")
2. 可组合函数内直接获取ViewModel
直接在需要使用ViewModel的可组合函数中调用hiltViewModel()方法即可,无需额外注解配置:
@Composable fun OrderScreen( // Hilt自动完成注入,无需外部传参 orderViewModel: OrderViewModel = hiltViewModel() ) { // 内部直接使用viewModel执行业务逻辑 }
补充说明
- 默认情况下该方式注入的ViewModel生命周期,和可组合函数依附的Activity/Fragment生命周期绑定;如果配合Compose Navigation使用,注入的ViewModel会默认和当前导航目的地的生命周期绑定,退出该目的地时ViewModel会自动回收。
- 如果你当前从Activity传递ViewModel的方案已经能满足业务需求,可以继续使用,上述方案为更解耦的可选实现。
内容的提问来源于stack exchange,提问作者Rizwan Minhas
相关产品推荐
相关产品推荐

