Hay*_*yan 4 android viewmodel android-jetpack-compose dagger-hilt
我正在使用Hilt与Jetpack 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.
编辑:我修复了崩溃,下面回答了如何修复。希望这会对某人有所帮助。
嗯,开发者页面还没有更新。
有一个名为 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)
现在它没有崩溃。谢谢。
| 归档时间: |
|
| 查看次数: |
1716 次 |
| 最近记录: |