Files
AndroidJetpack/Jetpack-Compose-Playground/docs/general/preview/previewparameter.md
T
2026-07-15 16:57:36 +08:00

72 lines
1.9 KiB
Markdown

# PreviewParameter
You can use **@PreviewParameter** to provide sample data for your Composables.
Let's say you have the following Composable and you want to generate a preview.
```kotlin
data class User(val name :String,val age:Int)
@Composable
fun UserInfo(user:User) {
Text(user.name+ " "+user.age)
}
```
Because UserInfo needs a User you can't directly use @Preview.
One way is to wrap your Composable in a Composable that provides a User
```kotlin
@Preview
@Composable
fun UserPreview() {
UserInfo(user = User("Jens", 31))
}
```
An other way is to use @PreviewParameter on the parameter. With PreviewParameter you can set a class
which will provide values for the needed User
```kotlin
@Preview
@Composable
fun UserInfo(@PreviewParameter(SampleUserProvider::class) user:User) {
Text(user.name+ " "+user.age)
}
```
### Create PreviewParameterProvider
**SampleUserProvider::class** will be the class which provides a User.
To create a PreviewParameterProvider you need to implement the interface PreviewParameterProvider.
The interface has two properties.
**values** is a sequence of your sample data.
```kotlin
class SampleUserProvider: PreviewParameterProvider<User> {
override val values = sequenceOf(User("Jens",31),User("Jim",44))
}
```
### Use PreviewParameterProvider
You can annotate your parameter with @PreviewParameter and the class which provides the sample data.
```kotlin
@Preview
@Composable
fun UserInfo(@PreviewParameter(SampleUserProvider::class) user:User) {
Text(user.name+ " "+user.age)
}
```
Now Android Studio will generate a preview of the Composable for every value that your provider provides.
<p align="center">
<img src ="../../../images/general/preview/previewParam1.png" height=100 width=300 />
</p>
You can limit the amount of previews by settings a limit to PreviewParameter.
```kotlin
@PreviewParameter(SampleUserProvider::class,1)
```