这个是因为Preview方法调用的时候没法使用依赖注入,导致viewmodel()方法失效,最快速的方式就是嵌套一层,把原来的内容变成无状态,把状态提升到嵌套的层中,再preview无状态的可组合函数。
如果命名不太适合再嵌套一层就在Preview方法中手动创建对应的viewmodel,然后作为参数传入compose函数。
例如:
compose方法的签名
@Composable
internal fun ProfileScreen(
viewModel: ProfileViewModel = viewModel()
)
preview中
@Preview(showBackground = true)
@Composable
private fun ProfileScreenPreView() {
val profileViewModel = ProfileViewModel(object : TokenRepository {
override fun getToken(): Flow<String> {
return flow {
emit("123213")
emit("123213")
}
}
override suspend fun setToken(token: String) {
TODO("Not yet implemented")
}
})
ProfileScreen(viewModel = profileViewModel)
}
参考StackOverflow的链接android studio - Jetpack Compose Preview Render Problem when casting LocalContext.current - Stack Overflow