Mor*_*zov 5 android kotlin android-jetpack-compose dagger-hilt
我有下一个屏幕:
@ExperimentalMaterialApi
@Composable
fun AccountListScreen(
navController: NavController,
viewModel: AccountListViewModel = hiltViewModel()
) {
Run Code Online (Sandbox Code Playgroud)
我想预览这个屏幕。
我正在尝试按以下方式执行此操作:
@ExperimentalMaterialApi
@Preview(showBackground = true, backgroundColor = 0xFFFFFF, showSystemUi = true)
@Composable
fun AccountListScreenPreview() {
AccountListScreen(
navController = rememberNavController(),
viewModel = hiltViewModel()
)
}
Run Code Online (Sandbox Code Playgroud)
但不幸的是,我在尝试构建预览时收到以下错误:
java.lang.IllegalStateException:预览版不支持 ViewModels 创建
如何解决这个问题呢?这也是我的一些课程的代码
我在应用程序中所做的就是为我的根可组合项创建一个包装器,该包装器从视图模型获取状态并将其传递给第二个可组合项,其中我有实际内容。如果可组合项需要调用 viewModel 的回调,那么我将它们定义为 viewModel 实现的接口。这样,我想要预览的可组合项仅接收一个 State 类,如果需要,还接收一个回调接口,我可以轻松地将其存根掉。
像这样的东西:
@Composable
fun CityScreen(
viewModel: CityViewModel,
modifier: Modifier = Modifier,
) {
val state = viewModel.state.collectAsState()
CityScreen(
state = state.value,
callbacks = viewModel,
modifier = modifier,
)
}
@Composable
private fun CityScreen(
state: CityState,
callbacks: CityCallbacks,
modifier: Modifier = Modifier,
) {
// code here
}
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
3870 次 |
| 最近记录: |