diff --git a/packages/in_app_purchase/in_app_purchase_ios/CHANGELOG.md b/packages/in_app_purchase/in_app_purchase_ios/CHANGELOG.md index 89d648af5d49..4a2ace891562 100644 --- a/packages/in_app_purchase/in_app_purchase_ios/CHANGELOG.md +++ b/packages/in_app_purchase/in_app_purchase_ios/CHANGELOG.md @@ -1,3 +1,7 @@ +## 0.1.3 + +* Add price symbol to platform interface object ProductDetail. + ## 0.1.2+2 * Fix crash when retrieveReceiptWithError gives an error. diff --git a/packages/in_app_purchase/in_app_purchase_ios/lib/src/types/app_store_product_details.dart b/packages/in_app_purchase/in_app_purchase_ios/lib/src/types/app_store_product_details.dart index 96386c5ef5ad..ff1153e27e47 100644 --- a/packages/in_app_purchase/in_app_purchase_ios/lib/src/types/app_store_product_details.dart +++ b/packages/in_app_purchase/in_app_purchase_ios/lib/src/types/app_store_product_details.dart @@ -19,6 +19,7 @@ class AppStoreProductDetails extends ProductDetails { required double rawPrice, required String currencyCode, required this.skProduct, + required String currencySymbol, }) : super( id: id, title: title, @@ -26,6 +27,7 @@ class AppStoreProductDetails extends ProductDetails { price: price, rawPrice: rawPrice, currencyCode: currencyCode, + currencySymbol: currencySymbol, ); /// Points back to the [SKProductWrapper] object that was used to generate @@ -41,6 +43,9 @@ class AppStoreProductDetails extends ProductDetails { price: product.priceLocale.currencySymbol + product.price, rawPrice: double.parse(product.price), currencyCode: product.priceLocale.currencyCode, + currencySymbol: product.priceLocale.currencySymbol.isNotEmpty + ? product.priceLocale.currencySymbol + : product.priceLocale.currencyCode, skProduct: product, ); } diff --git a/packages/in_app_purchase/in_app_purchase_ios/pubspec.yaml b/packages/in_app_purchase/in_app_purchase_ios/pubspec.yaml index c277686fb7c7..89b3ad19bacd 100644 --- a/packages/in_app_purchase/in_app_purchase_ios/pubspec.yaml +++ b/packages/in_app_purchase/in_app_purchase_ios/pubspec.yaml @@ -2,7 +2,7 @@ name: in_app_purchase_ios description: An implementation for the iOS platform of the Flutter `in_app_purchase` plugin. This uses the iOS StoreKit Framework. repository: https://github.com/flutter/plugins/tree/master/packages/in_app_purchase/in_app_purchase_ios issue_tracker: https://github.com/flutter/flutter/issues?q=is%3Aissue+is%3Aopen+label%3A%22p%3A+in_app_purchase%22 -version: 0.1.2+2 +version: 0.1.3 environment: sdk: ">=2.12.0 <3.0.0" @@ -18,7 +18,7 @@ dependencies: collection: ^1.15.0 flutter: sdk: flutter - in_app_purchase_platform_interface: ^1.0.0 + in_app_purchase_platform_interface: ^1.1.0 json_annotation: ^4.0.1 meta: ^1.3.0 test: ^1.16.0 diff --git a/packages/in_app_purchase/in_app_purchase_ios/test/fakes/fake_ios_platform.dart b/packages/in_app_purchase/in_app_purchase_ios/test/fakes/fake_ios_platform.dart index ac5c499768a1..9797dba59684 100644 --- a/packages/in_app_purchase/in_app_purchase_ios/test/fakes/fake_ios_platform.dart +++ b/packages/in_app_purchase/in_app_purchase_ios/test/fakes/fake_ios_platform.dart @@ -40,6 +40,9 @@ class FakeIOSPlatform { Map productWrapperMap = buildProductMap(dummyProductWrapper); productWrapperMap['productIdentifier'] = validID; + if (validID == '456') { + productWrapperMap['priceLocale'] = buildLocaleMap(noSymbolLocale); + } validProducts[validID] = SKProductWrapper.fromJson(productWrapperMap); } diff --git a/packages/in_app_purchase/in_app_purchase_ios/test/in_app_purchase_ios_platform_test.dart b/packages/in_app_purchase/in_app_purchase_ios/test/in_app_purchase_ios_platform_test.dart index 973b9d1da0fb..865468f532bf 100644 --- a/packages/in_app_purchase/in_app_purchase_ios/test/in_app_purchase_ios_platform_test.dart +++ b/packages/in_app_purchase/in_app_purchase_ios/test/in_app_purchase_ios_platform_test.dart @@ -49,6 +49,8 @@ void main() { expect(products[1].id, '456'); expect(response.notFoundIDs, ['789']); expect(response.error, isNull); + expect(response.productDetails.first.currencySymbol, r'$'); + expect(response.productDetails[1].currencySymbol, 'EUR'); }); test( diff --git a/packages/in_app_purchase/in_app_purchase_ios/test/store_kit_wrappers/sk_product_test.dart b/packages/in_app_purchase/in_app_purchase_ios/test/store_kit_wrappers/sk_product_test.dart index 6233a71be135..6a33b75d9808 100644 --- a/packages/in_app_purchase/in_app_purchase_ios/test/store_kit_wrappers/sk_product_test.dart +++ b/packages/in_app_purchase/in_app_purchase_ios/test/store_kit_wrappers/sk_product_test.dart @@ -119,8 +119,8 @@ void main() { test('LocaleWrapper should have property values consistent with map', () { final SKPriceLocaleWrapper wrapper = - SKPriceLocaleWrapper.fromJson(buildLocaleMap(dummyLocale)); - expect(wrapper, equals(dummyLocale)); + SKPriceLocaleWrapper.fromJson(buildLocaleMap(dollarLocale)); + expect(wrapper, equals(dollarLocale)); }); }); diff --git a/packages/in_app_purchase/in_app_purchase_ios/test/store_kit_wrappers/sk_test_stub_objects.dart b/packages/in_app_purchase/in_app_purchase_ios/test/store_kit_wrappers/sk_test_stub_objects.dart index 435dd44fdd8e..595a074f1cfe 100644 --- a/packages/in_app_purchase/in_app_purchase_ios/test/store_kit_wrappers/sk_test_stub_objects.dart +++ b/packages/in_app_purchase/in_app_purchase_ios/test/store_kit_wrappers/sk_test_stub_objects.dart @@ -33,12 +33,18 @@ final SKPaymentTransactionWrapper dummyTransaction = error: dummyError, ); -final SKPriceLocaleWrapper dummyLocale = SKPriceLocaleWrapper( +final SKPriceLocaleWrapper dollarLocale = SKPriceLocaleWrapper( currencySymbol: '\$', currencyCode: 'USD', countryCode: 'US', ); +final SKPriceLocaleWrapper noSymbolLocale = SKPriceLocaleWrapper( + currencySymbol: '', + currencyCode: 'EUR', + countryCode: 'UK', +); + final SKProductSubscriptionPeriodWrapper dummySubscription = SKProductSubscriptionPeriodWrapper( numberOfUnits: 1, @@ -47,7 +53,7 @@ final SKProductSubscriptionPeriodWrapper dummySubscription = final SKProductDiscountWrapper dummyDiscount = SKProductDiscountWrapper( price: '1.0', - priceLocale: dummyLocale, + priceLocale: dollarLocale, numberOfPeriods: 1, paymentMode: SKProductDiscountPaymentMode.payUpFront, subscriptionPeriod: dummySubscription, @@ -57,7 +63,7 @@ final SKProductWrapper dummyProductWrapper = SKProductWrapper( productIdentifier: 'id', localizedTitle: 'title', localizedDescription: 'description', - priceLocale: dummyLocale, + priceLocale: dollarLocale, subscriptionGroupIdentifier: 'com.group', price: '1.0', subscriptionPeriod: dummySubscription,