使用Hilt+Compose开发跳转页面时Cannot create an instance of ViewModel报错如何解决
报错解决方案
核心原因
你使用的Jetpack Compose默认viewModel()方法不支持Hilt注入的@HiltViewModel注解类,导致Hilt无法完成ViewModel实例的创建,触发报错。
修复步骤
1. 添加Hilt Navigation Compose依赖
在模块级build.gradle的dependencies块中添加如下依赖,版本需和你项目的Hilt版本保持一致:
dependencies { // 可根据你的Hilt版本替换适配的版本号,当前示例为1.2.0稳定版 implementation "androidx.hilt:hilt-navigation-compose:1.2.0" }
2. 替换ViewModel获取方式
修改BookListScreen中ViewModel的获取方法,将默认的viewModel()替换为Hilt提供的hiltViewModel(),修改后代码如下:
// 注意先导包:import androidx.hilt.navigation.compose.hiltViewModel @Composable fun BookListScreen( navController: NavController, bookListViewModel: BookListViewModel = hiltViewModel() ) { // 原有逻辑保持不变 }
3. 可选校验项(排查遗漏配置)
- 确认你的项目自定义Application类添加了
@HiltAndroidApp注解,该注解是Hilt初始化的必要配置,仅给Activity加@AndroidEntryPoint无法完成Hilt的全局注入 - 确认
BookRepository、LotrApi的依赖配置和你贴出的代码一致,无拼写错误 - 确认
BookListViewModel的@HiltViewModel注解、构造函数的@Inject注解无遗漏,你当前提供的代码中这部分配置正确
内容的提问来源于stack exchange,提问作者Hasan Altay
相关产品推荐
相关产品推荐

