提问人:James Olrog 提问时间:3/27/2023 最后编辑:James Olrog 更新时间:3/28/2023 访问量:37
为采用 Google Billing API 信息(例如“ProductDetail”)的可组合项创建预览
Creating a Preview for a Composable that takes Google Billing API information such as a `ProductDetail`
问:
考虑具有以下参数的可组合屏幕:
@Composable
fun PurchaseSubscriptionScreenContent(
availableSubscriptions: List<ProductDetails>,
selectedSubscription: ProductDetails,
isLoading: Boolean,
onPurchaseClicked: () -> Unit,
) {...}
我想为此屏幕编写预览,但初始化是私有的,尝试这样做时会显示以下错误:ProductDetails
Cannot access '<init>': it is package-private in 'ProductDetails'
我不希望在预览版中使用 Google Billing API,因为这将涉及使用 Internet 连接。考虑到这些参数,我如何最好地为这个可组合项编写预览?
到目前为止,我能想到的唯一方法是使用更基本的类型并自己从 ProductDetails 进行映射?例如:
@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,
) {...}
在视图模型中进行这种映射也是完全合理的,以便它是可测试的,但从头开始重新创建对象感觉有点烦人?欢迎任何其他想法。ProductDetail
答:
1赞
Derek K
3/28/2023
#1
一定要创建一个自定义类,例如具有适当映射方法的 a。然后只需在业务逻辑、查看模型和可组合项中使用它。View 不应知道使用的库。这样,除了预览和可测试性之外,还可以保护代码免受计费库更改的影响。Product
评论