kotlin - Jetpack Compose - NavHost 预览问题

标签 kotlin android-jetpack-compose

我今天开始学习jetpack compose,当我使用NavHost 时遇到了渲染预览问题。 :

java.lang.IllegalStateException: ViewModels creation is not supported in Preview
at androidx.compose.ui.tooling.ComposeViewAdapter$FakeViewModelStoreOwner$1.getViewModelStore(ComposeViewAdapter.kt:709)
at androidx.navigation.compose.NavHostKt.NavHost(NavHost.kt:103)
at androidx.navigation.compose.NavHostKt.NavHost(NavHost.kt:66)
at com.example.jetpackstudy.ui.activity.BottomNavActivity$AppContentView$1$3$1.invoke(BottomNavActivity.kt:71)
at com.example.jetpackstudy.ui.activity.BottomNavActivity$AppContentView$1$3$1.invoke(BottomNavActivity.kt:70)
我的项目代码:
@Preview @Composable
fun AppContentView() {
    JetPackStudyTheme {
        val navController = rememberNavController()
        Scaffold(topBar = {...})
        }, bottomBar = {...}
        }) {
            Surface(color = MaterialTheme.colors.primary, modifier = Modifier.fillMaxSize()) {
                NavHost(navController, startDestination = BotNavItem.Home.route) {
                    ...
                }
            }
        }
    }
}
当我使用这个时,有什么方法可以修复 Android Studio 上的预览NavHost ?我正在使用依赖项:implementation "androidx.navigation:navigation-compose:2.4.0-alpha06"

最佳答案

您可以使用的一种技术是为您的屏幕设置一个包装器,您的包装器将从您的 View 模型中获取状态并将其传递给实际屏幕。然后您可以预览采用状态的屏幕,而不是 View 模型。像这样的东西

@Composable
fun CityScreen(
    viewModel: CityViewModel,
    modifier: Modifier = Modifier,
) {
    val state = viewModel.state.collectAsState()
    CityScreen(
        state = state.value,
        modifier = modifier,
    )
}

@Composable
private fun CityScreen(
    state: CityState,
    modifier: Modifier = Modifier,
) {
    // code here
}

关于kotlin - Jetpack Compose - NavHost 预览问题,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/68719272/

相关文章:

java - Kotlin 是否提供其集合接口(interface)的任何实现?

android - 在请求数据时以及我们没有使用 firebase 身份验证的情况下,如何为 firebase firestore 编写安全规则?

android - 检测 Jetpack Compose 上的滑动方向

android - TextField 在 Android Compose 中被键盘覆盖

android - 如何在 Android Jetpack Compose 中更改布局子项的绘制顺序?

android - 如何使用 Koin DI 在 Activity 之间共享相同的 ViewModel 实例?

android - 如何在多个按钮单击的对话框中更改TextView的文本?使用kotlin

android - Retrofit 2 如何处理有时无效有时非无效的服务器响应

android - 创建 Hilt viewModel 时出错

android - 在 Jetpack Compose 中将 Drawable 实例设置为 Image