android - Preview Hilt 不支持创建 ViewModel

标签 android kotlin android-jetpack-compose dagger-hilt

我有下一个屏幕:

@ExperimentalMaterialApi
@Composable
fun AccountListScreen(
    navController: NavController,
    viewModel: AccountListViewModel = hiltViewModel()
) {

我想预览这个屏幕。

我正在尝试通过以下方式执行此操作:

@ExperimentalMaterialApi
@Preview(showBackground = true, backgroundColor = 0xFFFFFF, showSystemUi = true)
@Composable
fun AccountListScreenPreview() {
    AccountListScreen(
        navController = rememberNavController(),
        viewModel = hiltViewModel()
    )
}

但不幸的是,我在尝试构建预览时遇到以下错误:

java.lang.IllegalStateException: ViewModels creation is not supported in Preview

如何解决这个问题?这里还有code我的一些类(class)

最佳答案

我在我的应用程序中所做的是为我的根可组合项创建一个包装器,它从 View 模型获取状态并将其传递给第二个可组合项,我在其中拥有我的实际内容。如果有可组合项需要调入 viewModel 的回调,那么我将它们定义为 viewModel 实现的接口(interface)。这样,我想要预览的可组合项只接收一个 State 类,如果需要,还接收一个回调接口(interface),我可以轻松地将其 stub 。

像这样:

@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
}

关于android - Preview Hilt 不支持创建 ViewModel,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/69441805/

相关文章:

android - 如何在 Jetpack Compose 中勾勒文本

Android - 水平(从右到左)圆形背景颜色过渡

android - 如何在android中更改APP内容而不需要更新您的软件版本

Android Kotlin 底部导航栏

java - 命令适用于终端,但不适用于 Kotlin

kotlin - 为什么延迟会使 co 例程可以取消

android - 多重通知--android

android - 在android中更改标签栏的标题

android - 如何在Android中查找蓝牙配对失败的原因?

android - Jetpack Compose 预览无法再渲染