相关疑难解决方法(0)

如何在依赖于视图模型的可组合函数中进行预览?

问题描述

HomeScreen我想在预览功能中预览可组合功能HomeScreenPrevieiw。但是这是不可能的,因为我收到以下错误:

java.lang.IllegalStateException: ViewModels creation is not supported in Preview
    at androidx.compose.ui.tooling.ComposeViewAdapter$FakeViewModelStoreOwner$1.getViewModelStore(ComposeViewAdapter.kt:709)
    at androidx.lifecycle.ViewModelProvider.<init>(ViewModelProvider.kt:105)
    at androidx.lifecycle.viewmodel.compose.ViewModelKt.get(ViewModel.kt:82)
    at androidx.lifecycle.viewmodel.compose.ViewModelKt.viewModel(ViewModel.kt:72)
    at com.example.crud.ui.screens.home.HomeScreenKt.HomeScreen(HomeScreen.kt:53)
    at com.example.crud.ui.screens.home.HomeScreenKt.HomeScreenPreview(HomeScreen.kt:43)
    at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
    at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62)
    ...
Run Code Online (Sandbox Code Playgroud)

我的代码

这是我的HomeScreen代码:

@Composable
fun HomeScreen(
    viewModel: HomeViewModel = hiltViewModel(),
    navigateToDetailsAction: () -> Unit,
    openCardDetailsAction: (Int) -> Unit
) {
    val cities = viewModel.cities.observeAsState(listOf())
    Scaffold(
        topBar = { HomeAppBar() },
        floatingActionButton = { HomeFab(navigateToDetailsAction) }
    ) {
        HomeContent(cities) { id -> openCardDetailsAction(id) }
    }
}
Run Code Online (Sandbox Code Playgroud)

这是我的预览功能的代码:

@Preview
@Composable …
Run Code Online (Sandbox Code Playgroud)

android android-viewmodel android-jetpack-compose

12
推荐指数
1
解决办法
7124
查看次数

具有 ViewModel 参数时,Jetpack Compose 预览不显示

我正在使用 Jetpack Compose,并注意到预览未显示。我读过这样的文章,但我的问题似乎有不同的根本原因。即使我为 compose 函数中的所有参数添加了默认值,如下所示:

@OptIn(ExperimentalLifecycleComposeApi::class)
@Composable
@ExperimentalFoundationApi
@Preview
fun VolumeSettingsScreen(
    speech: SpeechHelper = SpeechHelper(), // my class that converts text to speech
    viewModel: VolumeSettingsViewModel = hiltViewModel(), // using Hilt to inject ViewModels
    navController: NavHostController = rememberNavController() // Compose Navigation component
) {
    MyAppheme {
        Box(
             ...
        )
    }
}
Run Code Online (Sandbox Code Playgroud)

当我回滚一些更改时,我意识到无论它们是否注入了 Hilt,都不@Preview支持。viewModels

知道如何解决这个问题吗?

android kotlin android-jetpack-compose android-jetpack-compose-preview

6
推荐指数
1
解决办法
1692
查看次数