我在使用Jetpack Compose时发现预览没有显示。我读过类似this的文章,但问题的根本原因似乎不同。甚至我还在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(
...
)
}
}
当我回滚一些更改时,我意识到@Preview
不支持viewModels
,无论它们是否注入了Hilt。
你知道怎么解决吗?
2条答案
按热度按时间k2arahey1#
你有没有考虑过这样一个结构,你有一个
Screen
和实际的Content
分开这样?在那里你可以预览
Content
的样子通过这种方式,所有不需要由实际内容可组合组件配置的组件都被分离,从而使您摆脱了配置预览的麻烦。
只是一个补充说明,可能离题了,我刚刚注意到你有一个这样的参数,
您可以考虑使用compositionLocalProvider(如果需要),它可以清理您的参数。
qhhrdooz2#
通过将ViewModels的函数 Package 到数据类中,我设法实现了屏幕预览的可视化,如下所示:
我没有在compose中直接传递ViewModel,而是在Data类中传递所需的函数,例如,如下所示:
我创建了一个在ViewModel中生成这些回调的方法,如下所示:
在NavHost中,我提升了ViewModel的创建,如下所示:
这是有点复杂,但它的工作:D.我会很高兴,如果有一些彗星的改进。