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"
您可以使用的一种技术是为屏幕提供一个包装器,您的包装器将从视图模型获取状态并将其传递到实际屏幕。然后,您可以预览采用状态的屏幕,而不是视图模型。像这样的东西
@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)
| 归档时间: |
|
| 查看次数: |
2483 次 |
| 最近记录: |