如何使用@PreviewParameter注解?

Hen*_*ing 19 android-jetpack-compose

我正在尝试预览一个以一个字符串参数作为输入的可组合项。我不确定@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)
}
Run Code Online (Sandbox Code Playgroud)

不渲染预览。如果我还添加@Preview注释,它表示我应该使用@PreviewParameter

Tan*_*.7x 19

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

您的示例应如下所示:

@Preview
@Composable
fun OverviewCardPreview(
    @PreviewParameter(DogProvider::class) dog: String,
) {
    Text(dog)
}
Run Code Online (Sandbox Code Playgroud)

另请注意,当前每个预览的可组合项只能有一个@PreviewParameter带注释的属性。


COR*_*ian 9

由于 Jetpack-Compose API 告诉我们:

不允许使用多个@PreviewParameter

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

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

class FeatureScreenPreviewParamProvider : PreviewParameterProvider<FeatureScreenParams> 
Run Code Online (Sandbox Code Playgroud)

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


使用WelcomeScreenPreviewMock进行示例