Jetpack Compose - NavHost 预览问题

Raf*_*edo 8 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)
Run Code Online (Sandbox Code Playgroud)

我的项目代码:

@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) {
                    ...
                }
            }
        }
    }
}
Run Code Online (Sandbox Code Playgroud)

当我使用这个时,有什么方法可以修复 Android Studio 上的预览吗NavHost?我正在使用依赖项:

implementation "androidx.navigation:navigation-compose:2.4.0-alpha06"

Fra*_*esc 1

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

@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
}
Run Code Online (Sandbox Code Playgroud)