Skip to content

KMT-879: Make org.jetbrains.compose.ui.tooling.preview.PreviewParameterProvider an actual implementation of androidx.compose.ui.tooling.preview.PreviewParameterProvider on Android (#5319) #5323

New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Merged
merged 1 commit into from
May 20, 2025

Conversation

boiler23
Copy link
Collaborator

@boiler23 boiler23 commented May 20, 2025

This is required for the preview parameters to be correctly picked up by the preview adapter in IDE, which expects the provider to be a subclass of AndroidX's interface, and fails with the ClassCastException otherwise.

Fixes https://youtrack.jetbrains.com/issue/CMP-8220

Release Notes

Fixes - Multiple Platforms

  • Support Preview parameters for Previews in common source sets in IJ and AS. Note: IDEs also need to implement support on their end. Please check the respective IDE release notes to confirm this is supported.

Example usage:

import androidx.compose.runtime.Composable
import org.jetbrains.compose.ui.tooling.preview.Preview
import org.jetbrains.compose.ui.tooling.preview.PreviewParameter
import org.jetbrains.compose.ui.tooling.preview.PreviewParameterProvider

class MyPreviewParameterProvider : PreviewParameterProvider<String> {
    override val values = sequenceOf("Hello, Compose!", "Hello, World!")
}

/**
 * This function will generate two preview images with different texts.
 */
@Preview
@Composable
fun MyPreview(@PreviewParameter(MyPreviewParameterProvider::class) text: String) {
    Text(text)
}

Testing

Once https://youtrack.jetbrains.com/issue/KMT-879 is merged in IJ, this change can be tested on Nightly Builds (ETA tomorrow)

…terProvider` an actual implementation of `androidx.compose.ui.tooling.preview.PreviewParameterProvider` on Android (#5319)

This is required for the preview parameters to be correctly picked up by
the preview adapter in IDE, which expects the provider to be a subclass
of AndroidX's interface, and fails with the `ClassCastException`
otherwise.

## Release Notes
### Fixes - Multiple Platforms
- Support Preview parameters for Previews in common source sets in IJ
and AS. Note: IDEs also need to implement support on their end. Please
check the respective IDE release notes to confirm this is supported.

Example usage:

```
import androidx.compose.runtime.Composable
import org.jetbrains.compose.ui.tooling.preview.Preview
import org.jetbrains.compose.ui.tooling.preview.PreviewParameter
import org.jetbrains.compose.ui.tooling.preview.PreviewParameterProvider

class MyPreviewParameterProvider : PreviewParameterProvider<String> {
    override val values = sequenceOf("Hello, Compose!", "Hello, World!")
}

/**
 * This function will generate two preview images with different texts.
 */
@Preview
@composable
fun MyPreview(@PreviewParameter(MyPreviewParameterProvider::class) text: String) {
    Text(text)
}
```
@boiler23 boiler23 requested a review from Kpotko May 20, 2025 12:24
@Kpotko Kpotko merged commit 03fe09d into release/1.8 May 20, 2025
1 check passed
@Kpotko Kpotko deleted the ilia.bogdanovich/KMT-879-preview-parameters-1.8 branch May 20, 2025 13:17
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
None yet
Projects
None yet
Development

Successfully merging this pull request may close these issues.

2 participants