Consider a Composable screen with the following parameters:
@Composable
fun PurchaseSubscriptionScreenContent(
availableSubscriptions: List<ProductDetails>,
selectedSubscription: ProductDetails,
isLoading: Boolean,
onPurchaseClicked: () -> Unit,
) {...}
I would like to write a Preview for this screen, but the init for ProductDetails
is private, and the following error is shown when this is attempted:
Cannot access '<init>': it is package-private in 'ProductDetails'
I do not wish to use the Google Billing API in the preview as this would involve using an internet connection. How would I best write a Preview for this composable, given these parameters?
The only approach I could think of so far is to just use more basic types and do the mapping from ProductDetails myself? e.g:
@Composable
fun PurchaseSubscriptionScreen(productDetails: List<ProductDetail>) {
PurchaseSubscriptionScreenContent(
subscritpionNames = productDetails.map { it.name },
subscritpionDescriptions = productDetails.map { it.description },
...
)
}
@Composable
fun PurchaseSubscriptionScreenContent(
subscriptionNames: List<String>,
subscriptionDescritpions: List<String>,
subscriptionOfferDesceritpions: List<String>,
...
isLoading: Boolean,
onPurchaseClicked: () -> Unit,
) {...}
It is perfectly reasonable to do this mapping in a view model too so that it is testable but it just feels a little annoying to be re-creating the ProductDetail
object from scratch? Any other ideas are welcome.