diff --git a/packages/in_app_purchase/CHANGELOG.md b/packages/in_app_purchase/CHANGELOG.md index 9b3fb1b42..5a201dea0 100644 --- a/packages/in_app_purchase/CHANGELOG.md +++ b/packages/in_app_purchase/CHANGELOG.md @@ -1,3 +1,8 @@ +## 0.1.8 + +* Update in_app_purchase to 3.3.0 +* Updates minimum supported SDK version to Flutter 3.38/Dart 3.10.0. + ## 0.1.7 * Add an `implements` entry to the pubspec to improve discoverability on pub.dev. diff --git a/packages/in_app_purchase/README.md b/packages/in_app_purchase/README.md index 2a35308ec..26705f89e 100644 --- a/packages/in_app_purchase/README.md +++ b/packages/in_app_purchase/README.md @@ -34,8 +34,8 @@ This package is not an _endorsed_ implementation of `in_app_purchase`. Therefore ```yaml dependencies: - in_app_purchase: ^3.2.3 - in_app_purchase_tizen: ^0.1.7 + in_app_purchase: ^3.3.0 + in_app_purchase_tizen: ^0.1.8 ``` Then you can import `in_app_purchase` and `in_app_purchase_tizen` in your Dart code: diff --git a/packages/in_app_purchase/example/lib/main.dart b/packages/in_app_purchase/example/lib/main.dart index c883fbc24..866f0a7d0 100644 --- a/packages/in_app_purchase/example/lib/main.dart +++ b/packages/in_app_purchase/example/lib/main.dart @@ -85,8 +85,8 @@ class _MyAppState extends State<_MyApp> { // The `identifiers` argument is not used on Tizen. // Use `InAppPurchaseTizenPlatformAddition.setRequestParameters` instead. - final ProductDetailsResponse productDetailResponse = - await _inAppPurchase.queryProductDetails({}); + final ProductDetailsResponse productDetailResponse = await _inAppPurchase + .queryProductDetails({}); if (productDetailResponse.error != null) { setState(() { _queryProductError = productDetailResponse.error!.message; @@ -173,8 +173,9 @@ class _MyAppState extends State<_MyApp> { final Widget storeHeader = ListTile( leading: Icon( _isAvailable ? Icons.check : Icons.block, - color: - _isAvailable ? Colors.green : ThemeData.light().colorScheme.error, + color: _isAvailable + ? Colors.green + : ThemeData.light().colorScheme.error, ), title: Text( 'The store is ${_isAvailable ? 'available' : 'unavailable'}.', diff --git a/packages/in_app_purchase/example/pubspec.yaml b/packages/in_app_purchase/example/pubspec.yaml index 886150c11..7d241f9a9 100644 --- a/packages/in_app_purchase/example/pubspec.yaml +++ b/packages/in_app_purchase/example/pubspec.yaml @@ -3,13 +3,13 @@ description: Demonstrates how to use the in_app_purchase_tizen plugin. publish_to: "none" environment: - sdk: ^3.5.0 - flutter: ">=3.24.0" + sdk: ^3.10.0 + flutter: ">=3.38.0" dependencies: flutter: sdk: flutter - in_app_purchase: ^3.2.3 + in_app_purchase: ^3.3.0 in_app_purchase_tizen: path: ../ diff --git a/packages/in_app_purchase/lib/src/billing_manager.dart b/packages/in_app_purchase/lib/src/billing_manager.dart index b4f5e2cb4..0da84cb6d 100644 --- a/packages/in_app_purchase/lib/src/billing_manager.dart +++ b/packages/in_app_purchase/lib/src/billing_manager.dart @@ -20,7 +20,7 @@ import 'messages.g.dart'; class BillingManager { /// Creates a billing manager. BillingManager({@visibleForTesting InAppPurchaseApi? hostApi}) - : _hostApi = hostApi ?? InAppPurchaseApi(); + : _hostApi = hostApi ?? InAppPurchaseApi(); late RequestParameters _requestParameters; @@ -391,19 +391,19 @@ class SamsungCheckoutPurchaseDetails extends PurchaseDetails { ) { final SamsungCheckoutPurchaseDetails purchaseDetails = SamsungCheckoutPurchaseDetails( - purchaseID: invoiceDetails.invoiceId, - productID: invoiceDetails.itemId, - verificationData: PurchaseVerificationData( - localVerificationData: invoiceDetails.invoiceId, - serverVerificationData: invoiceDetails.invoiceId, - source: kIAPSource, - ), - transactionDate: invoiceDetails.orderTime, - status: const PurchaseStateConverter().toPurchaseStatus( - invoiceDetails.cancelStatus, - ), - invoiceDetails: invoiceDetails, - ); + purchaseID: invoiceDetails.invoiceId, + productID: invoiceDetails.itemId, + verificationData: PurchaseVerificationData( + localVerificationData: invoiceDetails.invoiceId, + serverVerificationData: invoiceDetails.invoiceId, + source: kIAPSource, + ), + transactionDate: invoiceDetails.orderTime, + status: const PurchaseStateConverter().toPurchaseStatus( + invoiceDetails.cancelStatus, + ), + invoiceDetails: invoiceDetails, + ); if (purchaseDetails.status == PurchaseStatus.error) { purchaseDetails.error = IAPError( diff --git a/packages/in_app_purchase/lib/src/in_app_purchase_tizen_platform.dart b/packages/in_app_purchase/lib/src/in_app_purchase_tizen_platform.dart index dbcce60f0..054992004 100644 --- a/packages/in_app_purchase/lib/src/in_app_purchase_tizen_platform.dart +++ b/packages/in_app_purchase/lib/src/in_app_purchase_tizen_platform.dart @@ -39,7 +39,7 @@ class InAppPurchaseTizenPlatform extends InAppPurchasePlatform { } static final StreamController> - _purchaseUpdatedController = + _purchaseUpdatedController = StreamController>.broadcast(); @override @@ -59,12 +59,12 @@ class InAppPurchaseTizenPlatform extends InAppPurchasePlatform { /// Converts integer to [ItemType]. static ItemType _intToEnum(int number) => switch (number) { - 1 => ItemType.consumable, - 2 => ItemType.nonComsumabel, - 3 => ItemType.limitedPeriod, - 4 => ItemType.subscription, - _ => ItemType.none, - }; + 1 => ItemType.consumable, + 2 => ItemType.nonComsumabel, + 3 => ItemType.limitedPeriod, + 4 => ItemType.subscription, + _ => ItemType.none, + }; /// Converts Map? to the list of [ItemDetails]. List _getItemDetails(ProductsListApiResult response) { @@ -130,17 +130,17 @@ class InAppPurchaseTizenPlatform extends InAppPurchasePlatform { final ProductDetailsResponse productDetailsResponse = ProductDetailsResponse( - productDetails: productDetailsList, - notFoundIDs: invalidMessage, - error: exception == null - ? null - : IAPError( - source: kIAPSource, - code: exception.code, - message: exception.message ?? '', - details: exception.details, - ), - ); + productDetails: productDetailsList, + notFoundIDs: invalidMessage, + error: exception == null + ? null + : IAPError( + source: kIAPSource, + code: exception.code, + message: exception.message ?? '', + details: exception.details, + ), + ); return productDetailsResponse; } @@ -195,20 +195,22 @@ class InAppPurchaseTizenPlatform extends InAppPurchasePlatform { billingManager.requestPurchases(), ]); - final List pastPurchases = - responses.expand((GetUserPurchaseListAPIResult response) { - if (response.cpStatus == '100000') { - return _getInvoiceDetails(response); - } else { - return []; - } - }).map((InvoiceDetails purchaseWrapper) { - final SamsungCheckoutPurchaseDetails purchaseDetails = - SamsungCheckoutPurchaseDetails.fromPurchase(purchaseWrapper); - - purchaseDetails.status = PurchaseStatus.restored; - return purchaseDetails; - }).toList(); + final List pastPurchases = responses + .expand((GetUserPurchaseListAPIResult response) { + if (response.cpStatus == '100000') { + return _getInvoiceDetails(response); + } else { + return []; + } + }) + .map((InvoiceDetails purchaseWrapper) { + final SamsungCheckoutPurchaseDetails purchaseDetails = + SamsungCheckoutPurchaseDetails.fromPurchase(purchaseWrapper); + + purchaseDetails.status = PurchaseStatus.restored; + return purchaseDetails; + }) + .toList(); _purchaseUpdatedController.add(pastPurchases); } @@ -229,33 +231,38 @@ class InAppPurchaseTizenPlatform extends InAppPurchasePlatform { billingManager .requestPurchases() .then((GetUserPurchaseListAPIResult responses) { - for (int i = 0; i < responses.invoiceDetails.length; i++) { - if (_getInvoiceDetails(responses)[i].invoiceId == invoiceId) { - final List purchases = []; - purchases.add( - PurchaseDetails( - purchaseID: _getInvoiceDetails(responses)[i].invoiceId, - productID: _getInvoiceDetails(responses)[i].itemId, - verificationData: PurchaseVerificationData( - localVerificationData: - _getInvoiceDetails(responses)[i].invoiceId, - serverVerificationData: - _getInvoiceDetails(responses)[i].invoiceId, - source: kIAPSource, - ), - transactionDate: _getInvoiceDetails(responses)[i].orderTime, - status: const PurchaseStateConverter().toPurchaseStatus( - _getInvoiceDetails(responses)[i].cancelStatus, - ), - ), - ); - - _purchaseUpdatedController.add(purchases); - } - } - }).catchError((Object error) { - _purchaseUpdatedController.addError(error); - }), + for (int i = 0; i < responses.invoiceDetails.length; i++) { + if (_getInvoiceDetails(responses)[i].invoiceId == invoiceId) { + final List purchases = []; + purchases.add( + PurchaseDetails( + purchaseID: _getInvoiceDetails(responses)[i].invoiceId, + productID: _getInvoiceDetails(responses)[i].itemId, + verificationData: PurchaseVerificationData( + localVerificationData: _getInvoiceDetails( + responses, + )[i].invoiceId, + serverVerificationData: _getInvoiceDetails( + responses, + )[i].invoiceId, + source: kIAPSource, + ), + transactionDate: _getInvoiceDetails( + responses, + )[i].orderTime, + status: const PurchaseStateConverter().toPurchaseStatus( + _getInvoiceDetails(responses)[i].cancelStatus, + ), + ), + ); + + _purchaseUpdatedController.add(purchases); + } + } + }) + .catchError((Object error) { + _purchaseUpdatedController.addError(error); + }), ); return true; diff --git a/packages/in_app_purchase/lib/src/messages.g.dart b/packages/in_app_purchase/lib/src/messages.g.dart index 9767575ae..50bca378e 100644 --- a/packages/in_app_purchase/lib/src/messages.g.dart +++ b/packages/in_app_purchase/lib/src/messages.g.dart @@ -58,8 +58,8 @@ class ProductsListApiResult { cpResult: result[1] as String?, totalCount: result[2]! as int, checkValue: result[3]! as String, - itemDetails: - (result[4] as List?)!.cast?>(), + itemDetails: (result[4] as List?)! + .cast?>(), ); } } @@ -112,8 +112,8 @@ class GetUserPurchaseListAPIResult { cpResult: result[1] as String?, totalCount: result[2]! as int, checkValue: result[3]! as String, - invoiceDetails: - (result[4] as List?)!.cast?>(), + invoiceDetails: (result[4] as List?)! + .cast?>(), ); } } @@ -478,9 +478,10 @@ class InAppPurchaseApi { InAppPurchaseApi({ BinaryMessenger? binaryMessenger, String messageChannelSuffix = '', - }) : pigeonVar_binaryMessenger = binaryMessenger, - pigeonVar_messageChannelSuffix = - messageChannelSuffix.isNotEmpty ? '.$messageChannelSuffix' : ''; + }) : pigeonVar_binaryMessenger = binaryMessenger, + pigeonVar_messageChannelSuffix = messageChannelSuffix.isNotEmpty + ? '.$messageChannelSuffix' + : ''; final BinaryMessenger? pigeonVar_binaryMessenger; static const MessageCodec pigeonChannelCodec = _PigeonCodec(); @@ -493,10 +494,10 @@ class InAppPurchaseApi { 'dev.flutter.pigeon.in_app_purchase_tizen.InAppPurchaseApi.getProductsList$pigeonVar_messageChannelSuffix'; final BasicMessageChannel pigeonVar_channel = BasicMessageChannel( - pigeonVar_channelName, - pigeonChannelCodec, - binaryMessenger: pigeonVar_binaryMessenger, - ); + pigeonVar_channelName, + pigeonChannelCodec, + binaryMessenger: pigeonVar_binaryMessenger, + ); final List? pigeonVar_replyList = await pigeonVar_channel.send([product]) as List?; if (pigeonVar_replyList == null) { @@ -525,10 +526,10 @@ class InAppPurchaseApi { 'dev.flutter.pigeon.in_app_purchase_tizen.InAppPurchaseApi.getUserPurchaseList$pigeonVar_messageChannelSuffix'; final BasicMessageChannel pigeonVar_channel = BasicMessageChannel( - pigeonVar_channelName, - pigeonChannelCodec, - binaryMessenger: pigeonVar_binaryMessenger, - ); + pigeonVar_channelName, + pigeonChannelCodec, + binaryMessenger: pigeonVar_binaryMessenger, + ); final List? pigeonVar_replyList = await pigeonVar_channel.send([purchase]) as List?; if (pigeonVar_replyList == null) { @@ -556,10 +557,10 @@ class InAppPurchaseApi { 'dev.flutter.pigeon.in_app_purchase_tizen.InAppPurchaseApi.buyItem$pigeonVar_messageChannelSuffix'; final BasicMessageChannel pigeonVar_channel = BasicMessageChannel( - pigeonVar_channelName, - pigeonChannelCodec, - binaryMessenger: pigeonVar_binaryMessenger, - ); + pigeonVar_channelName, + pigeonChannelCodec, + binaryMessenger: pigeonVar_binaryMessenger, + ); final List? pigeonVar_replyList = await pigeonVar_channel.send([buyInfo]) as List?; if (pigeonVar_replyList == null) { @@ -586,10 +587,10 @@ class InAppPurchaseApi { 'dev.flutter.pigeon.in_app_purchase_tizen.InAppPurchaseApi.verifyInvoice$pigeonVar_messageChannelSuffix'; final BasicMessageChannel pigeonVar_channel = BasicMessageChannel( - pigeonVar_channelName, - pigeonChannelCodec, - binaryMessenger: pigeonVar_binaryMessenger, - ); + pigeonVar_channelName, + pigeonChannelCodec, + binaryMessenger: pigeonVar_binaryMessenger, + ); final List? pigeonVar_replyList = await pigeonVar_channel.send([invoice]) as List?; if (pigeonVar_replyList == null) { @@ -616,10 +617,10 @@ class InAppPurchaseApi { 'dev.flutter.pigeon.in_app_purchase_tizen.InAppPurchaseApi.isServiceAvailable$pigeonVar_messageChannelSuffix'; final BasicMessageChannel pigeonVar_channel = BasicMessageChannel( - pigeonVar_channelName, - pigeonChannelCodec, - binaryMessenger: pigeonVar_binaryMessenger, - ); + pigeonVar_channelName, + pigeonChannelCodec, + binaryMessenger: pigeonVar_binaryMessenger, + ); final List? pigeonVar_replyList = await pigeonVar_channel.send(null) as List?; if (pigeonVar_replyList == null) { @@ -645,10 +646,10 @@ class InAppPurchaseApi { 'dev.flutter.pigeon.in_app_purchase_tizen.InAppPurchaseApi.getCustomId$pigeonVar_messageChannelSuffix'; final BasicMessageChannel pigeonVar_channel = BasicMessageChannel( - pigeonVar_channelName, - pigeonChannelCodec, - binaryMessenger: pigeonVar_binaryMessenger, - ); + pigeonVar_channelName, + pigeonChannelCodec, + binaryMessenger: pigeonVar_binaryMessenger, + ); final List? pigeonVar_replyList = await pigeonVar_channel.send(null) as List?; if (pigeonVar_replyList == null) { @@ -674,10 +675,10 @@ class InAppPurchaseApi { 'dev.flutter.pigeon.in_app_purchase_tizen.InAppPurchaseApi.getCountryCode$pigeonVar_messageChannelSuffix'; final BasicMessageChannel pigeonVar_channel = BasicMessageChannel( - pigeonVar_channelName, - pigeonChannelCodec, - binaryMessenger: pigeonVar_binaryMessenger, - ); + pigeonVar_channelName, + pigeonChannelCodec, + binaryMessenger: pigeonVar_binaryMessenger, + ); final List? pigeonVar_replyList = await pigeonVar_channel.send(null) as List?; if (pigeonVar_replyList == null) { diff --git a/packages/in_app_purchase/pigeons/messages.dart b/packages/in_app_purchase/pigeons/messages.dart index 566b49415..a0fd77175 100644 --- a/packages/in_app_purchase/pigeons/messages.dart +++ b/packages/in_app_purchase/pigeons/messages.dart @@ -12,7 +12,6 @@ import 'package:pigeon/pigeon.dart'; cppSourceOut: 'tizen/src/messages.cc', ), ) - /// Dart wrapper around [`ProductsListApiResult`] in (https://developer.samsung.com/smarttv/develop/api-references/samsung-product-api-references/billing-api.html). /// /// Defines a dictionary for product list data returned by the getProductsList API. diff --git a/packages/in_app_purchase/pubspec.yaml b/packages/in_app_purchase/pubspec.yaml index 90696763a..9a7d66089 100644 --- a/packages/in_app_purchase/pubspec.yaml +++ b/packages/in_app_purchase/pubspec.yaml @@ -2,11 +2,11 @@ name: in_app_purchase_tizen description: Tizen implementation of the in_app_purchase plugin for Samsung Smart TV. homepage: https://github.com/flutter-tizen/plugins repository: https://github.com/flutter-tizen/plugins/tree/main/packages/in_app_purchase -version: 0.1.7 +version: 0.1.8 environment: - sdk: ^3.5.0 - flutter: ">=3.24.0" + sdk: ^3.10.0 + flutter: ">=3.38.0" flutter: plugin: