如何使用@PreviewParameter 注解?

我试图获得一个可组合的预览,它以一个字符串参数作为输入。我不确定应该如何使用 @PreviewParameter 注释。

这是我试过的

class DogProvider : PreviewParameterProvider<String> {
    override val values = listOf("Bela", "Stalone").asSequence()
}

@PreviewParameter(DogProvider::class)
@Composable
fun OverviewCard(
    dog: String,
    modifier: Modifier = Modifier
) {
    Text(dog)
}

不呈现预览。如果我还添加 @Preview 注释它说我应该使用 @PreviewParameter

stack overflow How to use the @PreviewParameter annotation?
原文答案
author avatar

接受的答案

你非常接近,但 @PreviewParameter 应该应用你的 Composable 的参数,而不是函数本身。

您的示例应如下所示:

@Preview
@Composable
fun OverviewCardPreview(
    @PreviewParameter(DogProvider::class) dog: String,
) {
    Text(dog)
}

另请注意,您目前只能为每个预览的可组合对象拥有一个带有 @PreviewParameter 注释的属性。


答案:

作者头像

由于 Jetpack-Compose API 告诉我们:

不允许使用多个@PreviewParameter

因此,如果我们有多个参数,最好避免默认初始化参数,是将所有参数包装在一个数据类中,并在 PreviewParameterProvider 的实现中模拟它们

@Preview
@Composable
private fun FeatureScreenPreviewMock(
    @PreviewParameter(FeatureScreenPreviewParamProvider::class) featureScreenParams: FeatureScreenParams,
)

class FeatureScreenPreviewParamProvider : PreviewParameterProvider<FeatureScreenParams> 

这样我们就不受参数数量的限制了


Sample with [WelcomeScreenPreviewMock](https://github.com/Coronel-B/Mobius-KMM/commit/b65e083b837326559049760ce14f4e43f2e30e3f#diff-306ba9b19e21a1879eeab873e8e56a23e71f2dcf8167a4d18de3fca3d943074e)