将 Hilt 与 Compose 结合使用时无法创建 ViewModel 实例

Hay*_*yan 4 android viewmodel android-jetpack-compose dagger-hilt

我正在使用HiltJetpack Compose.

@HiltViewModel
class HomeViewModel @Inject constructor(
    private val homeRepository: HomeRepository
): ViewModel() {

fun getCarDetails(): Car {
    return homeRepository.getCarDetails()
}
}
Run Code Online (Sandbox Code Playgroud)

这就是我注入回购协议的方式。

@Module
@InstallIn(SingletonComponent::class)

abstract class DataModule {

    @Binds
    @Singleton
    abstract fun bindHomeRepository(
        homeRepository: HomeRepositoryImpl,
    ): HomeRepository
}
Run Code Online (Sandbox Code Playgroud)

这就是我的可组合项。

@Composable
fun HomeScreen(viewModel: HomeViewModel = viewModel()) {
    val carData = viewModel.getCarDetails()
    Column(
        Modifier.fillMaxWidth(),
        horizontalAlignment = Alignment.CenterHorizontally
    ) {
        TopBar(carData = carData, modifier = Modifier)
        CarImage(carData = carData, modifier = Modifier)
    }
}
Run Code Online (Sandbox Code Playgroud)

我用 注释了我Activity@AndroidEntryPoint。无法弄清楚出了什么问题。它崩溃并显示一条消息:

java.lang.RuntimeException: Cannot create an instance of class com.example.carcontroller.ui.HomeViewModel
Run Code Online (Sandbox Code Playgroud)

我的库版本为composeis1.2.1和 for hilt 2.43.2. Compose ViewModel 版本是2.5.1.

编辑:我修复了崩溃,下面回答了如何修复。希望这会对某人有所帮助。

Hay*_*yan 6

嗯,开发者页面还没有更新。

有一个名为 hilt navigation compose 的库:

implementation "androidx.hilt:hilt-navigation-compose:1.0.0"
Run Code Online (Sandbox Code Playgroud)

同步后我们需要使用hiltViewModel()而不是像viewModel()这样

fun HomeScreen(viewModel: HomeViewModel = hiltViewModel())
Run Code Online (Sandbox Code Playgroud)

现在它没有崩溃。谢谢。