对于像您发布的代码这样的简单情况,拥有单独的可组合预览似乎有点太多了,但考虑一下这个场景,其中有2个带有非默认参数的组合,
@Composable
fun PersonBiography(
details: Data,
otherParameters : Any?
) {
Box(
modifier = Modifier.background(Color.Red)
) {
Text(details.dataValue)
}
}
@Composable
fun AccountDetails(
details: Data
) {
Box(
modifier = Modifier.background(Color.Green)
) {
Text(details.dataValue)
}
}
它们都需要相同的数据类,第一个有一个额外的参数.如果我必须预览它们,我必须 destruct 它们的签名,只是为了预览而为它们分配缺省值.
@Preview
@Composable
fun PersonBiography(
details: Data = Data(dataValue = ""),
otherParameters : Any? = null
) { … }
@Preview
@Composable
fun AccountDetails(
details: Data = Data(dataValue = "")
) { … }
一个很好的解决办法是有2个单独的预览合成组件,并利用PreviewParameterProvider
个组件拥有一个可重复使用的实用程序,它可以提供我需要的参数的实例.
class DetailsPreviewProvider : PreviewParameterProvider<Data> {
override val values = listOf(Data(dataValue = "Some Data")).asSequence()
}
@Preview
@Composable
fun PersonBiographyPreview(@PreviewParameter(DetailsPreviewProvider::class) details: Data) {
PersonBiography(
details = details,
// you may also consider creating a separate provider for this one if needed
null
)
}
@Preview
@Composable
fun AccountDetailsPreview(@PreviewParameter(DetailsPreviewProvider::class) details: Data) {
AccountDetails(details)
}
或者,如果PreviewParameterProvider
有点太多,您可以简单地创建一个可组合的预览,您可以在其中创建和提供模拟数据.
@Preview
@Composable
fun AccountDetailsPreview() {
val data = Data("Some Account Information")
AccountDetails(data)
}
使用这些方法中的任何一种,您都不需要打破实际的Composable的 struct ,只是为了大致了解它是什么样子.