From a5b8be6880f3b0d6c3a2aa25d750bcb0e5ef41f8 Mon Sep 17 00:00:00 2001 From: louisehsu Date: Tue, 25 Mar 2025 18:27:50 -0700 Subject: [PATCH 01/13] bonk --- .../InAppPurchasePlugin+StoreKit2.swift | 12 +- .../StoreKit2/sk2_pigeon.g.swift | 103 ++-- .../in_app_purchase_storekit_platform.dart | 3 + .../lib/src/sk2_pigeon.g.dart | 449 +++++++++++++----- .../sk2_storefront_wrapper.dart | 19 + .../lib/store_kit_2_wrappers.dart | 1 + .../pigeons/sk2_pigeon.dart | 3 + .../in_app_purchase_storekit/pubspec.yaml | 2 +- .../test/fakes/fake_storekit_platform.dart | 5 + ...app_purchase_storekit_2_platform_test.dart | 8 + .../test/sk2_test_api.g.dart | 277 +++++------ 11 files changed, 535 insertions(+), 347 deletions(-) create mode 100644 packages/in_app_purchase/in_app_purchase_storekit/lib/src/store_kit_2_wrappers/sk2_storefront_wrapper.dart diff --git a/packages/in_app_purchase/in_app_purchase_storekit/darwin/in_app_purchase_storekit/Sources/in_app_purchase_storekit/StoreKit2/InAppPurchasePlugin+StoreKit2.swift b/packages/in_app_purchase/in_app_purchase_storekit/darwin/in_app_purchase_storekit/Sources/in_app_purchase_storekit/StoreKit2/InAppPurchasePlugin+StoreKit2.swift index 05300e0c33d..6b419c7f679 100644 --- a/packages/in_app_purchase/in_app_purchase_storekit/darwin/in_app_purchase_storekit/Sources/in_app_purchase_storekit/StoreKit2/InAppPurchasePlugin+StoreKit2.swift +++ b/packages/in_app_purchase/in_app_purchase_storekit/darwin/in_app_purchase_storekit/Sources/in_app_purchase_storekit/StoreKit2/InAppPurchasePlugin+StoreKit2.swift @@ -6,7 +6,6 @@ import StoreKit @available(iOS 15.0, macOS 12.0, *) extension InAppPurchasePlugin: InAppPurchase2API { - // MARK: - Pigeon Functions /// Wrapper method around StoreKit2's canMakePayments() method @@ -146,6 +145,17 @@ extension InAppPurchasePlugin: InAppPurchase2API { } } +/// Wrapper method around StoreKit2's countryCode() method +/// https://developer.apple.com/documentation/storekit/storefront/countrycode + func countryCode(completion: @escaping (Result) -> Void) { + Task { + guard let currentStorefront = try await Storefront.current else { + completion(.failure(fatalError("Could not get current Storefront."))) + } + return completion(.success(try await currentStorefront.countryCode)); + } + } + /// This Task listens to Transation.updates as shown here /// https://developer.apple.com/documentation/storekit/transaction/3851206-updates /// This function should be called as soon as the app starts to avoid missing any Transactions done outside of the app. diff --git a/packages/in_app_purchase/in_app_purchase_storekit/darwin/in_app_purchase_storekit/Sources/in_app_purchase_storekit/StoreKit2/sk2_pigeon.g.swift b/packages/in_app_purchase/in_app_purchase_storekit/darwin/in_app_purchase_storekit/Sources/in_app_purchase_storekit/StoreKit2/sk2_pigeon.g.swift index 25c848efda2..d10e7085bbf 100644 --- a/packages/in_app_purchase/in_app_purchase_storekit/darwin/in_app_purchase_storekit/Sources/in_app_purchase_storekit/StoreKit2/sk2_pigeon.g.swift +++ b/packages/in_app_purchase/in_app_purchase_storekit/darwin/in_app_purchase_storekit/Sources/in_app_purchase_storekit/StoreKit2/sk2_pigeon.g.swift @@ -1,7 +1,7 @@ // Copyright 2013 The Flutter Authors. All rights reserved. // Use of this source code is governed by a BSD-style license that can be // found in the LICENSE file. -// Autogenerated from Pigeon (v22.7.3), do not edit directly. +// Autogenerated from Pigeon (v25.1.0), do not edit directly. // See also: https://pub.dev/packages/pigeon import Foundation @@ -18,9 +18,9 @@ import Foundation final class PigeonError: Error { let code: String let message: String? - let details: Any? + let details: Sendable? - init(code: String, message: String?, details: Any?) { + init(code: String, message: String?, details: Sendable?) { self.code = code self.message = message self.details = details @@ -59,9 +59,7 @@ private func wrapError(_ error: Any) -> [Any?] { } private func createConnectionError(withChannelName channelName: String) -> PigeonError { - return PigeonError( - code: "channel-error", message: "Unable to establish connection on channel: '\(channelName)'.", - details: "") + return PigeonError(code: "channel-error", message: "Unable to establish connection on channel: '\(channelName)'.", details: "") } private func isNullish(_ value: Any?) -> Bool { @@ -117,6 +115,7 @@ struct SK2SubscriptionOfferMessage { var periodCount: Int64 var paymentMode: SK2SubscriptionOfferPaymentModeMessage + // swift-format-ignore: AlwaysUseLowerCamelCase static func fromList(_ pigeonVar_list: [Any?]) -> SK2SubscriptionOfferMessage? { let id: String? = nilOrValue(pigeonVar_list[0]) @@ -154,6 +153,7 @@ struct SK2SubscriptionPeriodMessage { /// The unit of time that this period represents. var unit: SK2SubscriptionPeriodUnitMessage + // swift-format-ignore: AlwaysUseLowerCamelCase static func fromList(_ pigeonVar_list: [Any?]) -> SK2SubscriptionPeriodMessage? { let value = pigeonVar_list[0] as! Int64 @@ -181,6 +181,7 @@ struct SK2SubscriptionInfoMessage { /// The duration that this subscription lasts before auto-renewing. var subscriptionPeriod: SK2SubscriptionPeriodMessage + // swift-format-ignore: AlwaysUseLowerCamelCase static func fromList(_ pigeonVar_list: [Any?]) -> SK2SubscriptionInfoMessage? { let promotionalOffers = pigeonVar_list[0] as! [SK2SubscriptionOfferMessage] @@ -224,6 +225,7 @@ struct SK2ProductMessage { /// The currency and locale information for this product var priceLocale: SK2PriceLocaleMessage + // swift-format-ignore: AlwaysUseLowerCamelCase static func fromList(_ pigeonVar_list: [Any?]) -> SK2ProductMessage? { let id = pigeonVar_list[0] as! String @@ -265,6 +267,7 @@ struct SK2PriceLocaleMessage { var currencyCode: String var currencySymbol: String + // swift-format-ignore: AlwaysUseLowerCamelCase static func fromList(_ pigeonVar_list: [Any?]) -> SK2PriceLocaleMessage? { let currencyCode = pigeonVar_list[0] as! String @@ -288,6 +291,7 @@ struct SK2ProductPurchaseOptionsMessage { var appAccountToken: String? = nil var quantity: Int64? = nil + // swift-format-ignore: AlwaysUseLowerCamelCase static func fromList(_ pigeonVar_list: [Any?]) -> SK2ProductPurchaseOptionsMessage? { let appAccountToken: String? = nilOrValue(pigeonVar_list[0]) @@ -320,6 +324,7 @@ struct SK2TransactionMessage { var error: SK2ErrorMessage? = nil var jsonRepresentation: String? = nil + // swift-format-ignore: AlwaysUseLowerCamelCase static func fromList(_ pigeonVar_list: [Any?]) -> SK2TransactionMessage? { let id = pigeonVar_list[0] as! Int64 @@ -371,6 +376,7 @@ struct SK2ErrorMessage { var domain: String var userInfo: [String: Any]? = nil + // swift-format-ignore: AlwaysUseLowerCamelCase static func fromList(_ pigeonVar_list: [Any?]) -> SK2ErrorMessage? { let code = pigeonVar_list[0] as! Int64 @@ -508,34 +514,27 @@ class Sk2PigeonPigeonCodec: FlutterStandardMessageCodec, @unchecked Sendable { static let shared = Sk2PigeonPigeonCodec(readerWriter: Sk2PigeonPigeonCodecReaderWriter()) } + /// Generated protocol from Pigeon that represents a handler of messages from Flutter. protocol InAppPurchase2API { func canMakePayments() throws -> Bool - func products( - identifiers: [String], completion: @escaping (Result<[SK2ProductMessage], Error>) -> Void) - func purchase( - id: String, options: SK2ProductPurchaseOptionsMessage?, - completion: @escaping (Result) -> Void) + func products(identifiers: [String], completion: @escaping (Result<[SK2ProductMessage], Error>) -> Void) + func purchase(id: String, options: SK2ProductPurchaseOptionsMessage?, completion: @escaping (Result) -> Void) func transactions(completion: @escaping (Result<[SK2TransactionMessage], Error>) -> Void) func finish(id: Int64, completion: @escaping (Result) -> Void) func startListeningToTransactions() throws func stopListeningToTransactions() throws func restorePurchases(completion: @escaping (Result) -> Void) + func countryCode(completion: @escaping (Result) -> Void) } /// Generated setup class from Pigeon to handle messages through the `binaryMessenger`. class InAppPurchase2APISetup { static var codec: FlutterStandardMessageCodec { Sk2PigeonPigeonCodec.shared } /// Sets up an instance of `InAppPurchase2API` to handle messages through the `binaryMessenger`. - static func setUp( - binaryMessenger: FlutterBinaryMessenger, api: InAppPurchase2API?, - messageChannelSuffix: String = "" - ) { + static func setUp(binaryMessenger: FlutterBinaryMessenger, api: InAppPurchase2API?, messageChannelSuffix: String = "") { let channelSuffix = messageChannelSuffix.count > 0 ? ".\(messageChannelSuffix)" : "" - let canMakePaymentsChannel = FlutterBasicMessageChannel( - name: - "dev.flutter.pigeon.in_app_purchase_storekit.InAppPurchase2API.canMakePayments\(channelSuffix)", - binaryMessenger: binaryMessenger, codec: codec) + let canMakePaymentsChannel = FlutterBasicMessageChannel(name: "dev.flutter.pigeon.in_app_purchase_storekit.InAppPurchase2API.canMakePayments\(channelSuffix)", binaryMessenger: binaryMessenger, codec: codec) if let api = api { canMakePaymentsChannel.setMessageHandler { _, reply in do { @@ -548,10 +547,7 @@ class InAppPurchase2APISetup { } else { canMakePaymentsChannel.setMessageHandler(nil) } - let productsChannel = FlutterBasicMessageChannel( - name: - "dev.flutter.pigeon.in_app_purchase_storekit.InAppPurchase2API.products\(channelSuffix)", - binaryMessenger: binaryMessenger, codec: codec) + let productsChannel = FlutterBasicMessageChannel(name: "dev.flutter.pigeon.in_app_purchase_storekit.InAppPurchase2API.products\(channelSuffix)", binaryMessenger: binaryMessenger, codec: codec) if let api = api { productsChannel.setMessageHandler { message, reply in let args = message as! [Any?] @@ -568,10 +564,7 @@ class InAppPurchase2APISetup { } else { productsChannel.setMessageHandler(nil) } - let purchaseChannel = FlutterBasicMessageChannel( - name: - "dev.flutter.pigeon.in_app_purchase_storekit.InAppPurchase2API.purchase\(channelSuffix)", - binaryMessenger: binaryMessenger, codec: codec) + let purchaseChannel = FlutterBasicMessageChannel(name: "dev.flutter.pigeon.in_app_purchase_storekit.InAppPurchase2API.purchase\(channelSuffix)", binaryMessenger: binaryMessenger, codec: codec) if let api = api { purchaseChannel.setMessageHandler { message, reply in let args = message as! [Any?] @@ -589,10 +582,7 @@ class InAppPurchase2APISetup { } else { purchaseChannel.setMessageHandler(nil) } - let transactionsChannel = FlutterBasicMessageChannel( - name: - "dev.flutter.pigeon.in_app_purchase_storekit.InAppPurchase2API.transactions\(channelSuffix)", - binaryMessenger: binaryMessenger, codec: codec) + let transactionsChannel = FlutterBasicMessageChannel(name: "dev.flutter.pigeon.in_app_purchase_storekit.InAppPurchase2API.transactions\(channelSuffix)", binaryMessenger: binaryMessenger, codec: codec) if let api = api { transactionsChannel.setMessageHandler { _, reply in api.transactions { result in @@ -607,9 +597,7 @@ class InAppPurchase2APISetup { } else { transactionsChannel.setMessageHandler(nil) } - let finishChannel = FlutterBasicMessageChannel( - name: "dev.flutter.pigeon.in_app_purchase_storekit.InAppPurchase2API.finish\(channelSuffix)", - binaryMessenger: binaryMessenger, codec: codec) + let finishChannel = FlutterBasicMessageChannel(name: "dev.flutter.pigeon.in_app_purchase_storekit.InAppPurchase2API.finish\(channelSuffix)", binaryMessenger: binaryMessenger, codec: codec) if let api = api { finishChannel.setMessageHandler { message, reply in let args = message as! [Any?] @@ -626,10 +614,7 @@ class InAppPurchase2APISetup { } else { finishChannel.setMessageHandler(nil) } - let startListeningToTransactionsChannel = FlutterBasicMessageChannel( - name: - "dev.flutter.pigeon.in_app_purchase_storekit.InAppPurchase2API.startListeningToTransactions\(channelSuffix)", - binaryMessenger: binaryMessenger, codec: codec) + let startListeningToTransactionsChannel = FlutterBasicMessageChannel(name: "dev.flutter.pigeon.in_app_purchase_storekit.InAppPurchase2API.startListeningToTransactions\(channelSuffix)", binaryMessenger: binaryMessenger, codec: codec) if let api = api { startListeningToTransactionsChannel.setMessageHandler { _, reply in do { @@ -642,10 +627,7 @@ class InAppPurchase2APISetup { } else { startListeningToTransactionsChannel.setMessageHandler(nil) } - let stopListeningToTransactionsChannel = FlutterBasicMessageChannel( - name: - "dev.flutter.pigeon.in_app_purchase_storekit.InAppPurchase2API.stopListeningToTransactions\(channelSuffix)", - binaryMessenger: binaryMessenger, codec: codec) + let stopListeningToTransactionsChannel = FlutterBasicMessageChannel(name: "dev.flutter.pigeon.in_app_purchase_storekit.InAppPurchase2API.stopListeningToTransactions\(channelSuffix)", binaryMessenger: binaryMessenger, codec: codec) if let api = api { stopListeningToTransactionsChannel.setMessageHandler { _, reply in do { @@ -658,10 +640,7 @@ class InAppPurchase2APISetup { } else { stopListeningToTransactionsChannel.setMessageHandler(nil) } - let restorePurchasesChannel = FlutterBasicMessageChannel( - name: - "dev.flutter.pigeon.in_app_purchase_storekit.InAppPurchase2API.restorePurchases\(channelSuffix)", - binaryMessenger: binaryMessenger, codec: codec) + let restorePurchasesChannel = FlutterBasicMessageChannel(name: "dev.flutter.pigeon.in_app_purchase_storekit.InAppPurchase2API.restorePurchases\(channelSuffix)", binaryMessenger: binaryMessenger, codec: codec) if let api = api { restorePurchasesChannel.setMessageHandler { _, reply in api.restorePurchases { result in @@ -676,13 +655,26 @@ class InAppPurchase2APISetup { } else { restorePurchasesChannel.setMessageHandler(nil) } + let countryCodeChannel = FlutterBasicMessageChannel(name: "dev.flutter.pigeon.in_app_purchase_storekit.InAppPurchase2API.countryCode\(channelSuffix)", binaryMessenger: binaryMessenger, codec: codec) + if let api = api { + countryCodeChannel.setMessageHandler { _, reply in + api.countryCode { result in + switch result { + case .success(let res): + reply(wrapResult(res)) + case .failure(let error): + reply(wrapError(error)) + } + } + } + } else { + countryCodeChannel.setMessageHandler(nil) + } } } /// Generated protocol from Pigeon that represents Flutter messages that can be called from Swift. protocol InAppPurchase2CallbackAPIProtocol { - func onTransactionsUpdated( - newTransactions newTransactionsArg: [SK2TransactionMessage], - completion: @escaping (Result) -> Void) + func onTransactionsUpdated(newTransactions newTransactionsArg: [SK2TransactionMessage], completion: @escaping (Result) -> Void) } class InAppPurchase2CallbackAPI: InAppPurchase2CallbackAPIProtocol { private let binaryMessenger: FlutterBinaryMessenger @@ -694,14 +686,9 @@ class InAppPurchase2CallbackAPI: InAppPurchase2CallbackAPIProtocol { var codec: Sk2PigeonPigeonCodec { return Sk2PigeonPigeonCodec.shared } - func onTransactionsUpdated( - newTransactions newTransactionsArg: [SK2TransactionMessage], - completion: @escaping (Result) -> Void - ) { - let channelName: String = - "dev.flutter.pigeon.in_app_purchase_storekit.InAppPurchase2CallbackAPI.onTransactionsUpdated\(messageChannelSuffix)" - let channel = FlutterBasicMessageChannel( - name: channelName, binaryMessenger: binaryMessenger, codec: codec) + func onTransactionsUpdated(newTransactions newTransactionsArg: [SK2TransactionMessage], completion: @escaping (Result) -> Void) { + let channelName: String = "dev.flutter.pigeon.in_app_purchase_storekit.InAppPurchase2CallbackAPI.onTransactionsUpdated\(messageChannelSuffix)" + let channel = FlutterBasicMessageChannel(name: channelName, binaryMessenger: binaryMessenger, codec: codec) channel.sendMessage([newTransactionsArg] as [Any?]) { response in guard let listResponse = response as? [Any?] else { completion(.failure(createConnectionError(withChannelName: channelName))) @@ -713,7 +700,7 @@ class InAppPurchase2CallbackAPI: InAppPurchase2CallbackAPIProtocol { let details: String? = nilOrValue(listResponse[2]) completion(.failure(PigeonError(code: code, message: message, details: details))) } else { - completion(.success(Void())) + completion(.success(())) } } } diff --git a/packages/in_app_purchase/in_app_purchase_storekit/lib/src/in_app_purchase_storekit_platform.dart b/packages/in_app_purchase/in_app_purchase_storekit/lib/src/in_app_purchase_storekit_platform.dart index 51787d9c642..6272dcd583e 100644 --- a/packages/in_app_purchase/in_app_purchase_storekit/lib/src/in_app_purchase_storekit_platform.dart +++ b/packages/in_app_purchase/in_app_purchase_storekit/lib/src/in_app_purchase_storekit_platform.dart @@ -241,6 +241,9 @@ class InAppPurchaseStoreKitPlatform extends InAppPurchasePlatform { /// See: https://developer.apple.com/documentation/storekit/skstorefront?language=objc @override Future countryCode() async { + if (_useStoreKit2) { + return Storefront().countryCode(); + } return (await _skPaymentQueueWrapper.storefront())?.countryCode ?? ''; } diff --git a/packages/in_app_purchase/in_app_purchase_storekit/lib/src/sk2_pigeon.g.dart b/packages/in_app_purchase/in_app_purchase_storekit/lib/src/sk2_pigeon.g.dart index 749c50f9fff..81dda2888e9 100644 --- a/packages/in_app_purchase/in_app_purchase_storekit/lib/src/sk2_pigeon.g.dart +++ b/packages/in_app_purchase/in_app_purchase_storekit/lib/src/sk2_pigeon.g.dart @@ -1,7 +1,7 @@ // Copyright 2013 The Flutter Authors. All rights reserved. // Use of this source code is governed by a BSD-style license that can be // found in the LICENSE file. -// Autogenerated from Pigeon (v22.7.3), do not edit directly. +// Autogenerated from Pigeon (v25.1.0), do not edit directly. // See also: https://pub.dev/packages/pigeon // ignore_for_file: public_member_api_docs, non_constant_identifier_names, avoid_as, unused_import, unnecessary_parenthesis, prefer_null_aware_operators, omit_local_variable_types, unused_shown_name, unnecessary_import, no_leading_underscores_for_local_identifiers @@ -18,8 +18,7 @@ PlatformException _createConnectionError(String channelName) { ); } -List wrapResponse( - {Object? result, PlatformException? error, bool empty = false}) { +List wrapResponse({Object? result, PlatformException? error, bool empty = false}) { if (empty) { return []; } @@ -28,17 +27,29 @@ List wrapResponse( } return [error.code, error.message, error.details]; } +bool _deepEquals(Object? a, Object? b) { + if (a is List && b is List) { + return a.length == b.length && + a.indexed + .every(((int, dynamic) item) => _deepEquals(item.$2, b[item.$1])); + } + if (a is Map && b is Map) { + final Iterable keys = (a as Map).keys; + return a.length == b.length && keys.every((Object? key) => + (b as Map).containsKey(key) && + _deepEquals(a[key], b[key])); + } + return a == b; +} + enum SK2ProductTypeMessage { /// A consumable in-app purchase. consumable, - /// A non-consumable in-app purchase. nonConsumable, - /// A non-renewing subscription. nonRenewable, - /// An auto-renewable subscription. autoRenewable, } @@ -89,7 +100,7 @@ class SK2SubscriptionOfferMessage { SK2SubscriptionOfferPaymentModeMessage paymentMode; - Object encode() { + List _toList() { return [ id, price, @@ -100,6 +111,9 @@ class SK2SubscriptionOfferMessage { ]; } + Object encode() { + return _toList(); } + static SK2SubscriptionOfferMessage decode(Object result) { result as List; return SK2SubscriptionOfferMessage( @@ -111,6 +125,29 @@ class SK2SubscriptionOfferMessage { paymentMode: result[5]! as SK2SubscriptionOfferPaymentModeMessage, ); } + + @override + // ignore: avoid_equals_and_hash_code_on_mutable_classes + bool operator ==(Object other) { + if (other is! SK2SubscriptionOfferMessage || other.runtimeType != runtimeType) { + return false; + } + if (identical(this, other)) { + return true; + } + return + id == other.id + && price == other.price + && type == other.type + && period == other.period + && periodCount == other.periodCount + && paymentMode == other.paymentMode; + } + + @override + // ignore: avoid_equals_and_hash_code_on_mutable_classes + int get hashCode => Object.hashAll(_toList()) +; } class SK2SubscriptionPeriodMessage { @@ -125,13 +162,16 @@ class SK2SubscriptionPeriodMessage { /// The unit of time that this period represents. SK2SubscriptionPeriodUnitMessage unit; - Object encode() { + List _toList() { return [ value, unit, ]; } + Object encode() { + return _toList(); } + static SK2SubscriptionPeriodMessage decode(Object result) { result as List; return SK2SubscriptionPeriodMessage( @@ -139,6 +179,25 @@ class SK2SubscriptionPeriodMessage { unit: result[1]! as SK2SubscriptionPeriodUnitMessage, ); } + + @override + // ignore: avoid_equals_and_hash_code_on_mutable_classes + bool operator ==(Object other) { + if (other is! SK2SubscriptionPeriodMessage || other.runtimeType != runtimeType) { + return false; + } + if (identical(this, other)) { + return true; + } + return + value == other.value + && unit == other.unit; + } + + @override + // ignore: avoid_equals_and_hash_code_on_mutable_classes + int get hashCode => Object.hashAll(_toList()) +; } class SK2SubscriptionInfoMessage { @@ -157,7 +216,7 @@ class SK2SubscriptionInfoMessage { /// The duration that this subscription lasts before auto-renewing. SK2SubscriptionPeriodMessage subscriptionPeriod; - Object encode() { + List _toList() { return [ promotionalOffers, subscriptionGroupID, @@ -165,15 +224,37 @@ class SK2SubscriptionInfoMessage { ]; } + Object encode() { + return _toList(); } + static SK2SubscriptionInfoMessage decode(Object result) { result as List; return SK2SubscriptionInfoMessage( - promotionalOffers: - (result[0] as List?)!.cast(), + promotionalOffers: (result[0] as List?)!.cast(), subscriptionGroupID: result[1]! as String, subscriptionPeriod: result[2]! as SK2SubscriptionPeriodMessage, ); } + + @override + // ignore: avoid_equals_and_hash_code_on_mutable_classes + bool operator ==(Object other) { + if (other is! SK2SubscriptionInfoMessage || other.runtimeType != runtimeType) { + return false; + } + if (identical(this, other)) { + return true; + } + return + _deepEquals(promotionalOffers, other.promotionalOffers) + && subscriptionGroupID == other.subscriptionGroupID + && subscriptionPeriod == other.subscriptionPeriod; + } + + @override + // ignore: avoid_equals_and_hash_code_on_mutable_classes + int get hashCode => Object.hashAll(_toList()) +; } /// A Pigeon message class representing a Product @@ -214,7 +295,7 @@ class SK2ProductMessage { /// The currency and locale information for this product SK2PriceLocaleMessage priceLocale; - Object encode() { + List _toList() { return [ id, displayName, @@ -227,6 +308,9 @@ class SK2ProductMessage { ]; } + Object encode() { + return _toList(); } + static SK2ProductMessage decode(Object result) { result as List; return SK2ProductMessage( @@ -240,6 +324,31 @@ class SK2ProductMessage { priceLocale: result[7]! as SK2PriceLocaleMessage, ); } + + @override + // ignore: avoid_equals_and_hash_code_on_mutable_classes + bool operator ==(Object other) { + if (other is! SK2ProductMessage || other.runtimeType != runtimeType) { + return false; + } + if (identical(this, other)) { + return true; + } + return + id == other.id + && displayName == other.displayName + && description == other.description + && price == other.price + && displayPrice == other.displayPrice + && type == other.type + && subscription == other.subscription + && priceLocale == other.priceLocale; + } + + @override + // ignore: avoid_equals_and_hash_code_on_mutable_classes + int get hashCode => Object.hashAll(_toList()) +; } class SK2PriceLocaleMessage { @@ -252,13 +361,16 @@ class SK2PriceLocaleMessage { String currencySymbol; - Object encode() { + List _toList() { return [ currencyCode, currencySymbol, ]; } + Object encode() { + return _toList(); } + static SK2PriceLocaleMessage decode(Object result) { result as List; return SK2PriceLocaleMessage( @@ -266,6 +378,25 @@ class SK2PriceLocaleMessage { currencySymbol: result[1]! as String, ); } + + @override + // ignore: avoid_equals_and_hash_code_on_mutable_classes + bool operator ==(Object other) { + if (other is! SK2PriceLocaleMessage || other.runtimeType != runtimeType) { + return false; + } + if (identical(this, other)) { + return true; + } + return + currencyCode == other.currencyCode + && currencySymbol == other.currencySymbol; + } + + @override + // ignore: avoid_equals_and_hash_code_on_mutable_classes + int get hashCode => Object.hashAll(_toList()) +; } class SK2ProductPurchaseOptionsMessage { @@ -278,13 +409,16 @@ class SK2ProductPurchaseOptionsMessage { int? quantity; - Object encode() { + List _toList() { return [ appAccountToken, quantity, ]; } + Object encode() { + return _toList(); } + static SK2ProductPurchaseOptionsMessage decode(Object result) { result as List; return SK2ProductPurchaseOptionsMessage( @@ -292,6 +426,25 @@ class SK2ProductPurchaseOptionsMessage { quantity: result[1] as int?, ); } + + @override + // ignore: avoid_equals_and_hash_code_on_mutable_classes + bool operator ==(Object other) { + if (other is! SK2ProductPurchaseOptionsMessage || other.runtimeType != runtimeType) { + return false; + } + if (identical(this, other)) { + return true; + } + return + appAccountToken == other.appAccountToken + && quantity == other.quantity; + } + + @override + // ignore: avoid_equals_and_hash_code_on_mutable_classes + int get hashCode => Object.hashAll(_toList()) +; } class SK2TransactionMessage { @@ -331,7 +484,7 @@ class SK2TransactionMessage { String? jsonRepresentation; - Object encode() { + List _toList() { return [ id, originalId, @@ -347,6 +500,9 @@ class SK2TransactionMessage { ]; } + Object encode() { + return _toList(); } + static SK2TransactionMessage decode(Object result) { result as List; return SK2TransactionMessage( @@ -363,6 +519,34 @@ class SK2TransactionMessage { jsonRepresentation: result[10] as String?, ); } + + @override + // ignore: avoid_equals_and_hash_code_on_mutable_classes + bool operator ==(Object other) { + if (other is! SK2TransactionMessage || other.runtimeType != runtimeType) { + return false; + } + if (identical(this, other)) { + return true; + } + return + id == other.id + && originalId == other.originalId + && productId == other.productId + && purchaseDate == other.purchaseDate + && expirationDate == other.expirationDate + && purchasedQuantity == other.purchasedQuantity + && appAccountToken == other.appAccountToken + && restoring == other.restoring + && receiptData == other.receiptData + && error == other.error + && jsonRepresentation == other.jsonRepresentation; + } + + @override + // ignore: avoid_equals_and_hash_code_on_mutable_classes + int get hashCode => Object.hashAll(_toList()) +; } class SK2ErrorMessage { @@ -378,7 +562,7 @@ class SK2ErrorMessage { Map? userInfo; - Object encode() { + List _toList() { return [ code, domain, @@ -386,6 +570,9 @@ class SK2ErrorMessage { ]; } + Object encode() { + return _toList(); } + static SK2ErrorMessage decode(Object result) { result as List; return SK2ErrorMessage( @@ -394,8 +581,29 @@ class SK2ErrorMessage { userInfo: (result[2] as Map?)?.cast(), ); } + + @override + // ignore: avoid_equals_and_hash_code_on_mutable_classes + bool operator ==(Object other) { + if (other is! SK2ErrorMessage || other.runtimeType != runtimeType) { + return false; + } + if (identical(this, other)) { + return true; + } + return + code == other.code + && domain == other.domain + && _deepEquals(userInfo, other.userInfo); + } + + @override + // ignore: avoid_equals_and_hash_code_on_mutable_classes + int get hashCode => Object.hashAll(_toList()) +; } + class _PigeonCodec extends StandardMessageCodec { const _PigeonCodec(); @override @@ -403,43 +611,43 @@ class _PigeonCodec extends StandardMessageCodec { if (value is int) { buffer.putUint8(4); buffer.putInt64(value); - } else if (value is SK2ProductTypeMessage) { + } else if (value is SK2ProductTypeMessage) { buffer.putUint8(129); writeValue(buffer, value.index); - } else if (value is SK2SubscriptionOfferTypeMessage) { + } else if (value is SK2SubscriptionOfferTypeMessage) { buffer.putUint8(130); writeValue(buffer, value.index); - } else if (value is SK2SubscriptionOfferPaymentModeMessage) { + } else if (value is SK2SubscriptionOfferPaymentModeMessage) { buffer.putUint8(131); writeValue(buffer, value.index); - } else if (value is SK2SubscriptionPeriodUnitMessage) { + } else if (value is SK2SubscriptionPeriodUnitMessage) { buffer.putUint8(132); writeValue(buffer, value.index); - } else if (value is SK2ProductPurchaseResultMessage) { + } else if (value is SK2ProductPurchaseResultMessage) { buffer.putUint8(133); writeValue(buffer, value.index); - } else if (value is SK2SubscriptionOfferMessage) { + } else if (value is SK2SubscriptionOfferMessage) { buffer.putUint8(134); writeValue(buffer, value.encode()); - } else if (value is SK2SubscriptionPeriodMessage) { + } else if (value is SK2SubscriptionPeriodMessage) { buffer.putUint8(135); writeValue(buffer, value.encode()); - } else if (value is SK2SubscriptionInfoMessage) { + } else if (value is SK2SubscriptionInfoMessage) { buffer.putUint8(136); writeValue(buffer, value.encode()); - } else if (value is SK2ProductMessage) { + } else if (value is SK2ProductMessage) { buffer.putUint8(137); writeValue(buffer, value.encode()); - } else if (value is SK2PriceLocaleMessage) { + } else if (value is SK2PriceLocaleMessage) { buffer.putUint8(138); writeValue(buffer, value.encode()); - } else if (value is SK2ProductPurchaseOptionsMessage) { + } else if (value is SK2ProductPurchaseOptionsMessage) { buffer.putUint8(139); writeValue(buffer, value.encode()); - } else if (value is SK2TransactionMessage) { + } else if (value is SK2TransactionMessage) { buffer.putUint8(140); writeValue(buffer, value.encode()); - } else if (value is SK2ErrorMessage) { + } else if (value is SK2ErrorMessage) { buffer.putUint8(141); writeValue(buffer, value.encode()); } else { @@ -450,44 +658,36 @@ class _PigeonCodec extends StandardMessageCodec { @override Object? readValueOfType(int type, ReadBuffer buffer) { switch (type) { - case 129: + case 129: final int? value = readValue(buffer) as int?; return value == null ? null : SK2ProductTypeMessage.values[value]; - case 130: + case 130: final int? value = readValue(buffer) as int?; - return value == null - ? null - : SK2SubscriptionOfferTypeMessage.values[value]; - case 131: + return value == null ? null : SK2SubscriptionOfferTypeMessage.values[value]; + case 131: final int? value = readValue(buffer) as int?; - return value == null - ? null - : SK2SubscriptionOfferPaymentModeMessage.values[value]; - case 132: + return value == null ? null : SK2SubscriptionOfferPaymentModeMessage.values[value]; + case 132: final int? value = readValue(buffer) as int?; - return value == null - ? null - : SK2SubscriptionPeriodUnitMessage.values[value]; - case 133: + return value == null ? null : SK2SubscriptionPeriodUnitMessage.values[value]; + case 133: final int? value = readValue(buffer) as int?; - return value == null - ? null - : SK2ProductPurchaseResultMessage.values[value]; - case 134: + return value == null ? null : SK2ProductPurchaseResultMessage.values[value]; + case 134: return SK2SubscriptionOfferMessage.decode(readValue(buffer)!); - case 135: + case 135: return SK2SubscriptionPeriodMessage.decode(readValue(buffer)!); - case 136: + case 136: return SK2SubscriptionInfoMessage.decode(readValue(buffer)!); - case 137: + case 137: return SK2ProductMessage.decode(readValue(buffer)!); - case 138: + case 138: return SK2PriceLocaleMessage.decode(readValue(buffer)!); - case 139: + case 139: return SK2ProductPurchaseOptionsMessage.decode(readValue(buffer)!); - case 140: + case 140: return SK2TransactionMessage.decode(readValue(buffer)!); - case 141: + case 141: return SK2ErrorMessage.decode(readValue(buffer)!); default: return super.readValueOfType(type, buffer); @@ -499,11 +699,9 @@ class InAppPurchase2API { /// Constructor for [InAppPurchase2API]. The [binaryMessenger] named argument is /// available for dependency injection. If it is left null, the default /// BinaryMessenger will be used which routes to the host platform. - InAppPurchase2API( - {BinaryMessenger? binaryMessenger, String messageChannelSuffix = ''}) + InAppPurchase2API({BinaryMessenger? binaryMessenger, String messageChannelSuffix = ''}) : pigeonVar_binaryMessenger = binaryMessenger, - pigeonVar_messageChannelSuffix = - messageChannelSuffix.isNotEmpty ? '.$messageChannelSuffix' : ''; + pigeonVar_messageChannelSuffix = messageChannelSuffix.isNotEmpty ? '.$messageChannelSuffix' : ''; final BinaryMessenger? pigeonVar_binaryMessenger; static const MessageCodec pigeonChannelCodec = _PigeonCodec(); @@ -511,16 +709,15 @@ class InAppPurchase2API { final String pigeonVar_messageChannelSuffix; Future canMakePayments() async { - final String pigeonVar_channelName = - 'dev.flutter.pigeon.in_app_purchase_storekit.InAppPurchase2API.canMakePayments$pigeonVar_messageChannelSuffix'; - final BasicMessageChannel pigeonVar_channel = - BasicMessageChannel( + final String pigeonVar_channelName = 'dev.flutter.pigeon.in_app_purchase_storekit.InAppPurchase2API.canMakePayments$pigeonVar_messageChannelSuffix'; + final BasicMessageChannel pigeonVar_channel = BasicMessageChannel( pigeonVar_channelName, pigeonChannelCodec, binaryMessenger: pigeonVar_binaryMessenger, ); + final Future pigeonVar_sendFuture = pigeonVar_channel.send(null); final List? pigeonVar_replyList = - await pigeonVar_channel.send(null) as List?; + await pigeonVar_sendFuture as List?; if (pigeonVar_replyList == null) { throw _createConnectionError(pigeonVar_channelName); } else if (pigeonVar_replyList.length > 1) { @@ -540,16 +737,15 @@ class InAppPurchase2API { } Future> products(List identifiers) async { - final String pigeonVar_channelName = - 'dev.flutter.pigeon.in_app_purchase_storekit.InAppPurchase2API.products$pigeonVar_messageChannelSuffix'; - final BasicMessageChannel pigeonVar_channel = - BasicMessageChannel( + final String pigeonVar_channelName = 'dev.flutter.pigeon.in_app_purchase_storekit.InAppPurchase2API.products$pigeonVar_messageChannelSuffix'; + final BasicMessageChannel pigeonVar_channel = BasicMessageChannel( pigeonVar_channelName, pigeonChannelCodec, binaryMessenger: pigeonVar_binaryMessenger, ); + final Future pigeonVar_sendFuture = pigeonVar_channel.send([identifiers]); final List? pigeonVar_replyList = - await pigeonVar_channel.send([identifiers]) as List?; + await pigeonVar_sendFuture as List?; if (pigeonVar_replyList == null) { throw _createConnectionError(pigeonVar_channelName); } else if (pigeonVar_replyList.length > 1) { @@ -564,23 +760,20 @@ class InAppPurchase2API { message: 'Host platform returned null value for non-null return value.', ); } else { - return (pigeonVar_replyList[0] as List?)! - .cast(); + return (pigeonVar_replyList[0] as List?)!.cast(); } } - Future purchase(String id, - {SK2ProductPurchaseOptionsMessage? options}) async { - final String pigeonVar_channelName = - 'dev.flutter.pigeon.in_app_purchase_storekit.InAppPurchase2API.purchase$pigeonVar_messageChannelSuffix'; - final BasicMessageChannel pigeonVar_channel = - BasicMessageChannel( + Future purchase(String id, {SK2ProductPurchaseOptionsMessage? options}) async { + final String pigeonVar_channelName = 'dev.flutter.pigeon.in_app_purchase_storekit.InAppPurchase2API.purchase$pigeonVar_messageChannelSuffix'; + final BasicMessageChannel pigeonVar_channel = BasicMessageChannel( pigeonVar_channelName, pigeonChannelCodec, binaryMessenger: pigeonVar_binaryMessenger, ); + final Future pigeonVar_sendFuture = pigeonVar_channel.send([id, options]); final List? pigeonVar_replyList = - await pigeonVar_channel.send([id, options]) as List?; + await pigeonVar_sendFuture as List?; if (pigeonVar_replyList == null) { throw _createConnectionError(pigeonVar_channelName); } else if (pigeonVar_replyList.length > 1) { @@ -600,16 +793,15 @@ class InAppPurchase2API { } Future> transactions() async { - final String pigeonVar_channelName = - 'dev.flutter.pigeon.in_app_purchase_storekit.InAppPurchase2API.transactions$pigeonVar_messageChannelSuffix'; - final BasicMessageChannel pigeonVar_channel = - BasicMessageChannel( + final String pigeonVar_channelName = 'dev.flutter.pigeon.in_app_purchase_storekit.InAppPurchase2API.transactions$pigeonVar_messageChannelSuffix'; + final BasicMessageChannel pigeonVar_channel = BasicMessageChannel( pigeonVar_channelName, pigeonChannelCodec, binaryMessenger: pigeonVar_binaryMessenger, ); + final Future pigeonVar_sendFuture = pigeonVar_channel.send(null); final List? pigeonVar_replyList = - await pigeonVar_channel.send(null) as List?; + await pigeonVar_sendFuture as List?; if (pigeonVar_replyList == null) { throw _createConnectionError(pigeonVar_channelName); } else if (pigeonVar_replyList.length > 1) { @@ -624,22 +816,20 @@ class InAppPurchase2API { message: 'Host platform returned null value for non-null return value.', ); } else { - return (pigeonVar_replyList[0] as List?)! - .cast(); + return (pigeonVar_replyList[0] as List?)!.cast(); } } Future finish(int id) async { - final String pigeonVar_channelName = - 'dev.flutter.pigeon.in_app_purchase_storekit.InAppPurchase2API.finish$pigeonVar_messageChannelSuffix'; - final BasicMessageChannel pigeonVar_channel = - BasicMessageChannel( + final String pigeonVar_channelName = 'dev.flutter.pigeon.in_app_purchase_storekit.InAppPurchase2API.finish$pigeonVar_messageChannelSuffix'; + final BasicMessageChannel pigeonVar_channel = BasicMessageChannel( pigeonVar_channelName, pigeonChannelCodec, binaryMessenger: pigeonVar_binaryMessenger, ); + final Future pigeonVar_sendFuture = pigeonVar_channel.send([id]); final List? pigeonVar_replyList = - await pigeonVar_channel.send([id]) as List?; + await pigeonVar_sendFuture as List?; if (pigeonVar_replyList == null) { throw _createConnectionError(pigeonVar_channelName); } else if (pigeonVar_replyList.length > 1) { @@ -654,16 +844,15 @@ class InAppPurchase2API { } Future startListeningToTransactions() async { - final String pigeonVar_channelName = - 'dev.flutter.pigeon.in_app_purchase_storekit.InAppPurchase2API.startListeningToTransactions$pigeonVar_messageChannelSuffix'; - final BasicMessageChannel pigeonVar_channel = - BasicMessageChannel( + final String pigeonVar_channelName = 'dev.flutter.pigeon.in_app_purchase_storekit.InAppPurchase2API.startListeningToTransactions$pigeonVar_messageChannelSuffix'; + final BasicMessageChannel pigeonVar_channel = BasicMessageChannel( pigeonVar_channelName, pigeonChannelCodec, binaryMessenger: pigeonVar_binaryMessenger, ); + final Future pigeonVar_sendFuture = pigeonVar_channel.send(null); final List? pigeonVar_replyList = - await pigeonVar_channel.send(null) as List?; + await pigeonVar_sendFuture as List?; if (pigeonVar_replyList == null) { throw _createConnectionError(pigeonVar_channelName); } else if (pigeonVar_replyList.length > 1) { @@ -678,16 +867,15 @@ class InAppPurchase2API { } Future stopListeningToTransactions() async { - final String pigeonVar_channelName = - 'dev.flutter.pigeon.in_app_purchase_storekit.InAppPurchase2API.stopListeningToTransactions$pigeonVar_messageChannelSuffix'; - final BasicMessageChannel pigeonVar_channel = - BasicMessageChannel( + final String pigeonVar_channelName = 'dev.flutter.pigeon.in_app_purchase_storekit.InAppPurchase2API.stopListeningToTransactions$pigeonVar_messageChannelSuffix'; + final BasicMessageChannel pigeonVar_channel = BasicMessageChannel( pigeonVar_channelName, pigeonChannelCodec, binaryMessenger: pigeonVar_binaryMessenger, ); + final Future pigeonVar_sendFuture = pigeonVar_channel.send(null); final List? pigeonVar_replyList = - await pigeonVar_channel.send(null) as List?; + await pigeonVar_sendFuture as List?; if (pigeonVar_replyList == null) { throw _createConnectionError(pigeonVar_channelName); } else if (pigeonVar_replyList.length > 1) { @@ -702,16 +890,15 @@ class InAppPurchase2API { } Future restorePurchases() async { - final String pigeonVar_channelName = - 'dev.flutter.pigeon.in_app_purchase_storekit.InAppPurchase2API.restorePurchases$pigeonVar_messageChannelSuffix'; - final BasicMessageChannel pigeonVar_channel = - BasicMessageChannel( + final String pigeonVar_channelName = 'dev.flutter.pigeon.in_app_purchase_storekit.InAppPurchase2API.restorePurchases$pigeonVar_messageChannelSuffix'; + final BasicMessageChannel pigeonVar_channel = BasicMessageChannel( pigeonVar_channelName, pigeonChannelCodec, binaryMessenger: pigeonVar_binaryMessenger, ); + final Future pigeonVar_sendFuture = pigeonVar_channel.send(null); final List? pigeonVar_replyList = - await pigeonVar_channel.send(null) as List?; + await pigeonVar_sendFuture as List?; if (pigeonVar_replyList == null) { throw _createConnectionError(pigeonVar_channelName); } else if (pigeonVar_replyList.length > 1) { @@ -724,6 +911,34 @@ class InAppPurchase2API { return; } } + + Future countryCode() async { + final String pigeonVar_channelName = 'dev.flutter.pigeon.in_app_purchase_storekit.InAppPurchase2API.countryCode$pigeonVar_messageChannelSuffix'; + final BasicMessageChannel pigeonVar_channel = BasicMessageChannel( + pigeonVar_channelName, + pigeonChannelCodec, + binaryMessenger: pigeonVar_binaryMessenger, + ); + final Future pigeonVar_sendFuture = pigeonVar_channel.send(null); + final List? pigeonVar_replyList = + await pigeonVar_sendFuture as List?; + if (pigeonVar_replyList == null) { + throw _createConnectionError(pigeonVar_channelName); + } else if (pigeonVar_replyList.length > 1) { + throw PlatformException( + code: pigeonVar_replyList[0]! as String, + message: pigeonVar_replyList[1] as String?, + details: pigeonVar_replyList[2], + ); + } else if (pigeonVar_replyList[0] == null) { + throw PlatformException( + code: 'null-error', + message: 'Host platform returned null value for non-null return value.', + ); + } else { + return (pigeonVar_replyList[0] as String?)!; + } + } } abstract class InAppPurchase2CallbackAPI { @@ -731,29 +946,20 @@ abstract class InAppPurchase2CallbackAPI { void onTransactionsUpdated(List newTransactions); - static void setUp( - InAppPurchase2CallbackAPI? api, { - BinaryMessenger? binaryMessenger, - String messageChannelSuffix = '', - }) { - messageChannelSuffix = - messageChannelSuffix.isNotEmpty ? '.$messageChannelSuffix' : ''; + static void setUp(InAppPurchase2CallbackAPI? api, {BinaryMessenger? binaryMessenger, String messageChannelSuffix = '',}) { + messageChannelSuffix = messageChannelSuffix.isNotEmpty ? '.$messageChannelSuffix' : ''; { - final BasicMessageChannel< - Object?> pigeonVar_channel = BasicMessageChannel< - Object?>( - 'dev.flutter.pigeon.in_app_purchase_storekit.InAppPurchase2CallbackAPI.onTransactionsUpdated$messageChannelSuffix', - pigeonChannelCodec, + final BasicMessageChannel pigeonVar_channel = BasicMessageChannel( + 'dev.flutter.pigeon.in_app_purchase_storekit.InAppPurchase2CallbackAPI.onTransactionsUpdated$messageChannelSuffix', pigeonChannelCodec, binaryMessenger: binaryMessenger); if (api == null) { pigeonVar_channel.setMessageHandler(null); } else { pigeonVar_channel.setMessageHandler((Object? message) async { assert(message != null, - 'Argument for dev.flutter.pigeon.in_app_purchase_storekit.InAppPurchase2CallbackAPI.onTransactionsUpdated was null.'); + 'Argument for dev.flutter.pigeon.in_app_purchase_storekit.InAppPurchase2CallbackAPI.onTransactionsUpdated was null.'); final List args = (message as List?)!; - final List? arg_newTransactions = - (args[0] as List?)?.cast(); + final List? arg_newTransactions = (args[0] as List?)?.cast(); assert(arg_newTransactions != null, 'Argument for dev.flutter.pigeon.in_app_purchase_storekit.InAppPurchase2CallbackAPI.onTransactionsUpdated was null, expected non-null List.'); try { @@ -761,9 +967,8 @@ abstract class InAppPurchase2CallbackAPI { return wrapResponse(empty: true); } on PlatformException catch (e) { return wrapResponse(error: e); - } catch (e) { - return wrapResponse( - error: PlatformException(code: 'error', message: e.toString())); + } catch (e) { + return wrapResponse(error: PlatformException(code: 'error', message: e.toString())); } }); } diff --git a/packages/in_app_purchase/in_app_purchase_storekit/lib/src/store_kit_2_wrappers/sk2_storefront_wrapper.dart b/packages/in_app_purchase/in_app_purchase_storekit/lib/src/store_kit_2_wrappers/sk2_storefront_wrapper.dart new file mode 100644 index 00000000000..5f0779673e1 --- /dev/null +++ b/packages/in_app_purchase/in_app_purchase_storekit/lib/src/store_kit_2_wrappers/sk2_storefront_wrapper.dart @@ -0,0 +1,19 @@ +// Copyright 2013 The Flutter Authors. All rights reserved. +// Use of this source code is governed by a BSD-style license that can be +// found in the LICENSE file. + +import '../../store_kit_2_wrappers.dart'; + +InAppPurchase2API _hostApi = InAppPurchase2API(); + +/// Wrapper for StoreKit2's Storefront +/// (https://developer.apple.com/documentation/storekit/storefront) +final class Storefront { + /// Dart wrapper for StoreKit2's countryCode() + /// Returns the 3 letter code for a store's locale + /// (https://developer.apple.com/documentation/storekit/storefront/countrycode) + Future countryCode() async { + final String code = await _hostApi.countryCode(); + return code; + } +} diff --git a/packages/in_app_purchase/in_app_purchase_storekit/lib/store_kit_2_wrappers.dart b/packages/in_app_purchase/in_app_purchase_storekit/lib/store_kit_2_wrappers.dart index 05482180b1a..c34c24a7c1a 100644 --- a/packages/in_app_purchase/in_app_purchase_storekit/lib/store_kit_2_wrappers.dart +++ b/packages/in_app_purchase/in_app_purchase_storekit/lib/store_kit_2_wrappers.dart @@ -5,4 +5,5 @@ export 'src/sk2_pigeon.g.dart'; export 'src/store_kit_2_wrappers/sk2_appstore_wrapper.dart'; export 'src/store_kit_2_wrappers/sk2_product_wrapper.dart'; +export 'src/store_kit_2_wrappers/sk2_storefront_wrapper.dart'; export 'src/store_kit_2_wrappers/sk2_transaction_wrapper.dart'; diff --git a/packages/in_app_purchase/in_app_purchase_storekit/pigeons/sk2_pigeon.dart b/packages/in_app_purchase/in_app_purchase_storekit/pigeons/sk2_pigeon.dart index cfb92b57b92..177079c77fc 100644 --- a/packages/in_app_purchase/in_app_purchase_storekit/pigeons/sk2_pigeon.dart +++ b/packages/in_app_purchase/in_app_purchase_storekit/pigeons/sk2_pigeon.dart @@ -199,6 +199,9 @@ abstract class InAppPurchase2API { @async void restorePurchases(); + + @async + String countryCode(); } @FlutterApi() diff --git a/packages/in_app_purchase/in_app_purchase_storekit/pubspec.yaml b/packages/in_app_purchase/in_app_purchase_storekit/pubspec.yaml index c6d973ce1f0..1807d90c16e 100644 --- a/packages/in_app_purchase/in_app_purchase_storekit/pubspec.yaml +++ b/packages/in_app_purchase/in_app_purchase_storekit/pubspec.yaml @@ -31,7 +31,7 @@ dev_dependencies: flutter_test: sdk: flutter json_serializable: ^6.0.0 - pigeon: ^22.4.2 + pigeon: ^25.1.0 test: ^1.16.0 topics: diff --git a/packages/in_app_purchase/in_app_purchase_storekit/test/fakes/fake_storekit_platform.dart b/packages/in_app_purchase/in_app_purchase_storekit/test/fakes/fake_storekit_platform.dart index 15ea45f2a42..ddd210b2f47 100644 --- a/packages/in_app_purchase/in_app_purchase_storekit/test/fakes/fake_storekit_platform.dart +++ b/packages/in_app_purchase/in_app_purchase_storekit/test/fakes/fake_storekit_platform.dart @@ -394,6 +394,11 @@ class FakeStoreKit2Platform implements TestInAppPurchase2Api { InAppPurchaseStoreKitPlatform.sk2TransactionObserver .onTransactionsUpdated(transactionList); } + + @override + Future countryCode() async { + return 'ABC'; + } } SK2TransactionMessage createPendingTransaction(String id, {int quantity = 1}) { diff --git a/packages/in_app_purchase/in_app_purchase_storekit/test/in_app_purchase_storekit_2_platform_test.dart b/packages/in_app_purchase/in_app_purchase_storekit/test/in_app_purchase_storekit_2_platform_test.dart index 658932e7ce6..d9a40562f59 100644 --- a/packages/in_app_purchase/in_app_purchase_storekit/test/in_app_purchase_storekit_2_platform_test.dart +++ b/packages/in_app_purchase/in_app_purchase_storekit/test/in_app_purchase_storekit_2_platform_test.dart @@ -192,4 +192,12 @@ void main() { } }); }); + + group('billing configuration', () { + test('country_code', () async { + const String expectedCountryCode = 'ABC'; + final String countryCode = await iapStoreKitPlatform.countryCode(); + expect(countryCode, expectedCountryCode); + }); + }); } diff --git a/packages/in_app_purchase/in_app_purchase_storekit/test/sk2_test_api.g.dart b/packages/in_app_purchase/in_app_purchase_storekit/test/sk2_test_api.g.dart index 3a51df7105e..f46f21ab527 100644 --- a/packages/in_app_purchase/in_app_purchase_storekit/test/sk2_test_api.g.dart +++ b/packages/in_app_purchase/in_app_purchase_storekit/test/sk2_test_api.g.dart @@ -1,7 +1,7 @@ // Copyright 2013 The Flutter Authors. All rights reserved. // Use of this source code is governed by a BSD-style license that can be // found in the LICENSE file. -// Autogenerated from Pigeon (v22.7.3), do not edit directly. +// Autogenerated from Pigeon (v25.1.0), do not edit directly. // See also: https://pub.dev/packages/pigeon // ignore_for_file: public_member_api_docs, non_constant_identifier_names, avoid_as, unused_import, unnecessary_parenthesis, unnecessary_import, no_leading_underscores_for_local_identifiers // ignore_for_file: avoid_relative_lib_imports @@ -13,6 +13,7 @@ import 'package:flutter_test/flutter_test.dart'; import 'package:in_app_purchase_storekit/src/sk2_pigeon.g.dart'; + class _PigeonCodec extends StandardMessageCodec { const _PigeonCodec(); @override @@ -20,43 +21,43 @@ class _PigeonCodec extends StandardMessageCodec { if (value is int) { buffer.putUint8(4); buffer.putInt64(value); - } else if (value is SK2ProductTypeMessage) { + } else if (value is SK2ProductTypeMessage) { buffer.putUint8(129); writeValue(buffer, value.index); - } else if (value is SK2SubscriptionOfferTypeMessage) { + } else if (value is SK2SubscriptionOfferTypeMessage) { buffer.putUint8(130); writeValue(buffer, value.index); - } else if (value is SK2SubscriptionOfferPaymentModeMessage) { + } else if (value is SK2SubscriptionOfferPaymentModeMessage) { buffer.putUint8(131); writeValue(buffer, value.index); - } else if (value is SK2SubscriptionPeriodUnitMessage) { + } else if (value is SK2SubscriptionPeriodUnitMessage) { buffer.putUint8(132); writeValue(buffer, value.index); - } else if (value is SK2ProductPurchaseResultMessage) { + } else if (value is SK2ProductPurchaseResultMessage) { buffer.putUint8(133); writeValue(buffer, value.index); - } else if (value is SK2SubscriptionOfferMessage) { + } else if (value is SK2SubscriptionOfferMessage) { buffer.putUint8(134); writeValue(buffer, value.encode()); - } else if (value is SK2SubscriptionPeriodMessage) { + } else if (value is SK2SubscriptionPeriodMessage) { buffer.putUint8(135); writeValue(buffer, value.encode()); - } else if (value is SK2SubscriptionInfoMessage) { + } else if (value is SK2SubscriptionInfoMessage) { buffer.putUint8(136); writeValue(buffer, value.encode()); - } else if (value is SK2ProductMessage) { + } else if (value is SK2ProductMessage) { buffer.putUint8(137); writeValue(buffer, value.encode()); - } else if (value is SK2PriceLocaleMessage) { + } else if (value is SK2PriceLocaleMessage) { buffer.putUint8(138); writeValue(buffer, value.encode()); - } else if (value is SK2ProductPurchaseOptionsMessage) { + } else if (value is SK2ProductPurchaseOptionsMessage) { buffer.putUint8(139); writeValue(buffer, value.encode()); - } else if (value is SK2TransactionMessage) { + } else if (value is SK2TransactionMessage) { buffer.putUint8(140); writeValue(buffer, value.encode()); - } else if (value is SK2ErrorMessage) { + } else if (value is SK2ErrorMessage) { buffer.putUint8(141); writeValue(buffer, value.encode()); } else { @@ -67,44 +68,36 @@ class _PigeonCodec extends StandardMessageCodec { @override Object? readValueOfType(int type, ReadBuffer buffer) { switch (type) { - case 129: + case 129: final int? value = readValue(buffer) as int?; return value == null ? null : SK2ProductTypeMessage.values[value]; - case 130: + case 130: final int? value = readValue(buffer) as int?; - return value == null - ? null - : SK2SubscriptionOfferTypeMessage.values[value]; - case 131: + return value == null ? null : SK2SubscriptionOfferTypeMessage.values[value]; + case 131: final int? value = readValue(buffer) as int?; - return value == null - ? null - : SK2SubscriptionOfferPaymentModeMessage.values[value]; - case 132: + return value == null ? null : SK2SubscriptionOfferPaymentModeMessage.values[value]; + case 132: final int? value = readValue(buffer) as int?; - return value == null - ? null - : SK2SubscriptionPeriodUnitMessage.values[value]; - case 133: + return value == null ? null : SK2SubscriptionPeriodUnitMessage.values[value]; + case 133: final int? value = readValue(buffer) as int?; - return value == null - ? null - : SK2ProductPurchaseResultMessage.values[value]; - case 134: + return value == null ? null : SK2ProductPurchaseResultMessage.values[value]; + case 134: return SK2SubscriptionOfferMessage.decode(readValue(buffer)!); - case 135: + case 135: return SK2SubscriptionPeriodMessage.decode(readValue(buffer)!); - case 136: + case 136: return SK2SubscriptionInfoMessage.decode(readValue(buffer)!); - case 137: + case 137: return SK2ProductMessage.decode(readValue(buffer)!); - case 138: + case 138: return SK2PriceLocaleMessage.decode(readValue(buffer)!); - case 139: + case 139: return SK2ProductPurchaseOptionsMessage.decode(readValue(buffer)!); - case 140: + case 140: return SK2TransactionMessage.decode(readValue(buffer)!); - case 141: + case 141: return SK2ErrorMessage.decode(readValue(buffer)!); default: return super.readValueOfType(type, buffer); @@ -113,16 +106,14 @@ class _PigeonCodec extends StandardMessageCodec { } abstract class TestInAppPurchase2Api { - static TestDefaultBinaryMessengerBinding? get _testBinaryMessengerBinding => - TestDefaultBinaryMessengerBinding.instance; + static TestDefaultBinaryMessengerBinding? get _testBinaryMessengerBinding => TestDefaultBinaryMessengerBinding.instance; static const MessageCodec pigeonChannelCodec = _PigeonCodec(); bool canMakePayments(); Future> products(List identifiers); - Future purchase(String id, - {SK2ProductPurchaseOptionsMessage? options}); + Future purchase(String id, {SK2ProductPurchaseOptionsMessage? options}); Future> transactions(); @@ -134,150 +125,109 @@ abstract class TestInAppPurchase2Api { Future restorePurchases(); - static void setUp( - TestInAppPurchase2Api? api, { - BinaryMessenger? binaryMessenger, - String messageChannelSuffix = '', - }) { - messageChannelSuffix = - messageChannelSuffix.isNotEmpty ? '.$messageChannelSuffix' : ''; + Future countryCode(); + + static void setUp(TestInAppPurchase2Api? api, {BinaryMessenger? binaryMessenger, String messageChannelSuffix = '',}) { + messageChannelSuffix = messageChannelSuffix.isNotEmpty ? '.$messageChannelSuffix' : ''; { - final BasicMessageChannel< - Object?> pigeonVar_channel = BasicMessageChannel< - Object?>( - 'dev.flutter.pigeon.in_app_purchase_storekit.InAppPurchase2API.canMakePayments$messageChannelSuffix', - pigeonChannelCodec, + final BasicMessageChannel pigeonVar_channel = BasicMessageChannel( + 'dev.flutter.pigeon.in_app_purchase_storekit.InAppPurchase2API.canMakePayments$messageChannelSuffix', pigeonChannelCodec, binaryMessenger: binaryMessenger); if (api == null) { - _testBinaryMessengerBinding!.defaultBinaryMessenger - .setMockDecodedMessageHandler(pigeonVar_channel, null); + _testBinaryMessengerBinding!.defaultBinaryMessenger.setMockDecodedMessageHandler(pigeonVar_channel, null); } else { - _testBinaryMessengerBinding!.defaultBinaryMessenger - .setMockDecodedMessageHandler(pigeonVar_channel, - (Object? message) async { + _testBinaryMessengerBinding!.defaultBinaryMessenger.setMockDecodedMessageHandler(pigeonVar_channel, (Object? message) async { try { final bool output = api.canMakePayments(); return [output]; } on PlatformException catch (e) { return wrapResponse(error: e); - } catch (e) { - return wrapResponse( - error: PlatformException(code: 'error', message: e.toString())); + } catch (e) { + return wrapResponse(error: PlatformException(code: 'error', message: e.toString())); } }); } } { - final BasicMessageChannel< - Object?> pigeonVar_channel = BasicMessageChannel< - Object?>( - 'dev.flutter.pigeon.in_app_purchase_storekit.InAppPurchase2API.products$messageChannelSuffix', - pigeonChannelCodec, + final BasicMessageChannel pigeonVar_channel = BasicMessageChannel( + 'dev.flutter.pigeon.in_app_purchase_storekit.InAppPurchase2API.products$messageChannelSuffix', pigeonChannelCodec, binaryMessenger: binaryMessenger); if (api == null) { - _testBinaryMessengerBinding!.defaultBinaryMessenger - .setMockDecodedMessageHandler(pigeonVar_channel, null); + _testBinaryMessengerBinding!.defaultBinaryMessenger.setMockDecodedMessageHandler(pigeonVar_channel, null); } else { - _testBinaryMessengerBinding!.defaultBinaryMessenger - .setMockDecodedMessageHandler(pigeonVar_channel, - (Object? message) async { + _testBinaryMessengerBinding!.defaultBinaryMessenger.setMockDecodedMessageHandler(pigeonVar_channel, (Object? message) async { assert(message != null, - 'Argument for dev.flutter.pigeon.in_app_purchase_storekit.InAppPurchase2API.products was null.'); + 'Argument for dev.flutter.pigeon.in_app_purchase_storekit.InAppPurchase2API.products was null.'); final List args = (message as List?)!; - final List? arg_identifiers = - (args[0] as List?)?.cast(); + final List? arg_identifiers = (args[0] as List?)?.cast(); assert(arg_identifiers != null, 'Argument for dev.flutter.pigeon.in_app_purchase_storekit.InAppPurchase2API.products was null, expected non-null List.'); try { - final List output = - await api.products(arg_identifiers!); + final List output = await api.products(arg_identifiers!); return [output]; } on PlatformException catch (e) { return wrapResponse(error: e); - } catch (e) { - return wrapResponse( - error: PlatformException(code: 'error', message: e.toString())); + } catch (e) { + return wrapResponse(error: PlatformException(code: 'error', message: e.toString())); } }); } } { - final BasicMessageChannel< - Object?> pigeonVar_channel = BasicMessageChannel< - Object?>( - 'dev.flutter.pigeon.in_app_purchase_storekit.InAppPurchase2API.purchase$messageChannelSuffix', - pigeonChannelCodec, + final BasicMessageChannel pigeonVar_channel = BasicMessageChannel( + 'dev.flutter.pigeon.in_app_purchase_storekit.InAppPurchase2API.purchase$messageChannelSuffix', pigeonChannelCodec, binaryMessenger: binaryMessenger); if (api == null) { - _testBinaryMessengerBinding!.defaultBinaryMessenger - .setMockDecodedMessageHandler(pigeonVar_channel, null); + _testBinaryMessengerBinding!.defaultBinaryMessenger.setMockDecodedMessageHandler(pigeonVar_channel, null); } else { - _testBinaryMessengerBinding!.defaultBinaryMessenger - .setMockDecodedMessageHandler(pigeonVar_channel, - (Object? message) async { + _testBinaryMessengerBinding!.defaultBinaryMessenger.setMockDecodedMessageHandler(pigeonVar_channel, (Object? message) async { assert(message != null, - 'Argument for dev.flutter.pigeon.in_app_purchase_storekit.InAppPurchase2API.purchase was null.'); + 'Argument for dev.flutter.pigeon.in_app_purchase_storekit.InAppPurchase2API.purchase was null.'); final List args = (message as List?)!; final String? arg_id = (args[0] as String?); assert(arg_id != null, 'Argument for dev.flutter.pigeon.in_app_purchase_storekit.InAppPurchase2API.purchase was null, expected non-null String.'); - final SK2ProductPurchaseOptionsMessage? arg_options = - (args[1] as SK2ProductPurchaseOptionsMessage?); + final SK2ProductPurchaseOptionsMessage? arg_options = (args[1] as SK2ProductPurchaseOptionsMessage?); try { - final SK2ProductPurchaseResultMessage output = - await api.purchase(arg_id!, options: arg_options); + final SK2ProductPurchaseResultMessage output = await api.purchase(arg_id!, options: arg_options); return [output]; } on PlatformException catch (e) { return wrapResponse(error: e); - } catch (e) { - return wrapResponse( - error: PlatformException(code: 'error', message: e.toString())); + } catch (e) { + return wrapResponse(error: PlatformException(code: 'error', message: e.toString())); } }); } } { - final BasicMessageChannel< - Object?> pigeonVar_channel = BasicMessageChannel< - Object?>( - 'dev.flutter.pigeon.in_app_purchase_storekit.InAppPurchase2API.transactions$messageChannelSuffix', - pigeonChannelCodec, + final BasicMessageChannel pigeonVar_channel = BasicMessageChannel( + 'dev.flutter.pigeon.in_app_purchase_storekit.InAppPurchase2API.transactions$messageChannelSuffix', pigeonChannelCodec, binaryMessenger: binaryMessenger); if (api == null) { - _testBinaryMessengerBinding!.defaultBinaryMessenger - .setMockDecodedMessageHandler(pigeonVar_channel, null); + _testBinaryMessengerBinding!.defaultBinaryMessenger.setMockDecodedMessageHandler(pigeonVar_channel, null); } else { - _testBinaryMessengerBinding!.defaultBinaryMessenger - .setMockDecodedMessageHandler(pigeonVar_channel, - (Object? message) async { + _testBinaryMessengerBinding!.defaultBinaryMessenger.setMockDecodedMessageHandler(pigeonVar_channel, (Object? message) async { try { final List output = await api.transactions(); return [output]; } on PlatformException catch (e) { return wrapResponse(error: e); - } catch (e) { - return wrapResponse( - error: PlatformException(code: 'error', message: e.toString())); + } catch (e) { + return wrapResponse(error: PlatformException(code: 'error', message: e.toString())); } }); } } { - final BasicMessageChannel< - Object?> pigeonVar_channel = BasicMessageChannel< - Object?>( - 'dev.flutter.pigeon.in_app_purchase_storekit.InAppPurchase2API.finish$messageChannelSuffix', - pigeonChannelCodec, + final BasicMessageChannel pigeonVar_channel = BasicMessageChannel( + 'dev.flutter.pigeon.in_app_purchase_storekit.InAppPurchase2API.finish$messageChannelSuffix', pigeonChannelCodec, binaryMessenger: binaryMessenger); if (api == null) { - _testBinaryMessengerBinding!.defaultBinaryMessenger - .setMockDecodedMessageHandler(pigeonVar_channel, null); + _testBinaryMessengerBinding!.defaultBinaryMessenger.setMockDecodedMessageHandler(pigeonVar_channel, null); } else { - _testBinaryMessengerBinding!.defaultBinaryMessenger - .setMockDecodedMessageHandler(pigeonVar_channel, - (Object? message) async { + _testBinaryMessengerBinding!.defaultBinaryMessenger.setMockDecodedMessageHandler(pigeonVar_channel, (Object? message) async { assert(message != null, - 'Argument for dev.flutter.pigeon.in_app_purchase_storekit.InAppPurchase2API.finish was null.'); + 'Argument for dev.flutter.pigeon.in_app_purchase_storekit.InAppPurchase2API.finish was null.'); final List args = (message as List?)!; final int? arg_id = (args[0] as int?); assert(arg_id != null, @@ -287,87 +237,84 @@ abstract class TestInAppPurchase2Api { return wrapResponse(empty: true); } on PlatformException catch (e) { return wrapResponse(error: e); - } catch (e) { - return wrapResponse( - error: PlatformException(code: 'error', message: e.toString())); + } catch (e) { + return wrapResponse(error: PlatformException(code: 'error', message: e.toString())); } }); } } { - final BasicMessageChannel< - Object?> pigeonVar_channel = BasicMessageChannel< - Object?>( - 'dev.flutter.pigeon.in_app_purchase_storekit.InAppPurchase2API.startListeningToTransactions$messageChannelSuffix', - pigeonChannelCodec, + final BasicMessageChannel pigeonVar_channel = BasicMessageChannel( + 'dev.flutter.pigeon.in_app_purchase_storekit.InAppPurchase2API.startListeningToTransactions$messageChannelSuffix', pigeonChannelCodec, binaryMessenger: binaryMessenger); if (api == null) { - _testBinaryMessengerBinding!.defaultBinaryMessenger - .setMockDecodedMessageHandler(pigeonVar_channel, null); + _testBinaryMessengerBinding!.defaultBinaryMessenger.setMockDecodedMessageHandler(pigeonVar_channel, null); } else { - _testBinaryMessengerBinding!.defaultBinaryMessenger - .setMockDecodedMessageHandler(pigeonVar_channel, - (Object? message) async { + _testBinaryMessengerBinding!.defaultBinaryMessenger.setMockDecodedMessageHandler(pigeonVar_channel, (Object? message) async { try { api.startListeningToTransactions(); return wrapResponse(empty: true); } on PlatformException catch (e) { return wrapResponse(error: e); - } catch (e) { - return wrapResponse( - error: PlatformException(code: 'error', message: e.toString())); + } catch (e) { + return wrapResponse(error: PlatformException(code: 'error', message: e.toString())); } }); } } { - final BasicMessageChannel< - Object?> pigeonVar_channel = BasicMessageChannel< - Object?>( - 'dev.flutter.pigeon.in_app_purchase_storekit.InAppPurchase2API.stopListeningToTransactions$messageChannelSuffix', - pigeonChannelCodec, + final BasicMessageChannel pigeonVar_channel = BasicMessageChannel( + 'dev.flutter.pigeon.in_app_purchase_storekit.InAppPurchase2API.stopListeningToTransactions$messageChannelSuffix', pigeonChannelCodec, binaryMessenger: binaryMessenger); if (api == null) { - _testBinaryMessengerBinding!.defaultBinaryMessenger - .setMockDecodedMessageHandler(pigeonVar_channel, null); + _testBinaryMessengerBinding!.defaultBinaryMessenger.setMockDecodedMessageHandler(pigeonVar_channel, null); } else { - _testBinaryMessengerBinding!.defaultBinaryMessenger - .setMockDecodedMessageHandler(pigeonVar_channel, - (Object? message) async { + _testBinaryMessengerBinding!.defaultBinaryMessenger.setMockDecodedMessageHandler(pigeonVar_channel, (Object? message) async { try { api.stopListeningToTransactions(); return wrapResponse(empty: true); } on PlatformException catch (e) { return wrapResponse(error: e); - } catch (e) { - return wrapResponse( - error: PlatformException(code: 'error', message: e.toString())); + } catch (e) { + return wrapResponse(error: PlatformException(code: 'error', message: e.toString())); } }); } } { - final BasicMessageChannel< - Object?> pigeonVar_channel = BasicMessageChannel< - Object?>( - 'dev.flutter.pigeon.in_app_purchase_storekit.InAppPurchase2API.restorePurchases$messageChannelSuffix', - pigeonChannelCodec, + final BasicMessageChannel pigeonVar_channel = BasicMessageChannel( + 'dev.flutter.pigeon.in_app_purchase_storekit.InAppPurchase2API.restorePurchases$messageChannelSuffix', pigeonChannelCodec, binaryMessenger: binaryMessenger); if (api == null) { - _testBinaryMessengerBinding!.defaultBinaryMessenger - .setMockDecodedMessageHandler(pigeonVar_channel, null); + _testBinaryMessengerBinding!.defaultBinaryMessenger.setMockDecodedMessageHandler(pigeonVar_channel, null); } else { - _testBinaryMessengerBinding!.defaultBinaryMessenger - .setMockDecodedMessageHandler(pigeonVar_channel, - (Object? message) async { + _testBinaryMessengerBinding!.defaultBinaryMessenger.setMockDecodedMessageHandler(pigeonVar_channel, (Object? message) async { try { await api.restorePurchases(); return wrapResponse(empty: true); } on PlatformException catch (e) { return wrapResponse(error: e); - } catch (e) { - return wrapResponse( - error: PlatformException(code: 'error', message: e.toString())); + } catch (e) { + return wrapResponse(error: PlatformException(code: 'error', message: e.toString())); + } + }); + } + } + { + final BasicMessageChannel pigeonVar_channel = BasicMessageChannel( + 'dev.flutter.pigeon.in_app_purchase_storekit.InAppPurchase2API.countryCode$messageChannelSuffix', pigeonChannelCodec, + binaryMessenger: binaryMessenger); + if (api == null) { + _testBinaryMessengerBinding!.defaultBinaryMessenger.setMockDecodedMessageHandler(pigeonVar_channel, null); + } else { + _testBinaryMessengerBinding!.defaultBinaryMessenger.setMockDecodedMessageHandler(pigeonVar_channel, (Object? message) async { + try { + final String output = await api.countryCode(); + return [output]; + } on PlatformException catch (e) { + return wrapResponse(error: e); + } catch (e) { + return wrapResponse(error: PlatformException(code: 'error', message: e.toString())); } }); } From fb336f2568cccb6e7b7c341c33e41f3ecf2476c9 Mon Sep 17 00:00:00 2001 From: louisehsu Date: Thu, 27 Mar 2025 14:49:14 -0700 Subject: [PATCH 02/13] bonk 2 --- .../in_app_purchase_storekit/CHANGELOG.md | 4 ++++ .../InAppPurchasePlugin+StoreKit2.swift | 10 ++++++++ .../StoreKit2/sk2_pigeon.g.swift | 16 +++++++++++++ .../example/lib/main.dart | 2 +- ...p_purchase_storekit_platform_addition.dart | 9 ++++++++ .../lib/src/sk2_pigeon.g.dart | 23 +++++++++++++++++++ .../sk2_appstore_wrapper.dart | 4 ++++ .../pigeons/sk2_pigeon.dart | 3 +++ .../test/fakes/fake_storekit_platform.dart | 5 ++++ .../test/sk2_test_api.g.dart | 21 +++++++++++++++++ 10 files changed, 96 insertions(+), 1 deletion(-) diff --git a/packages/in_app_purchase/in_app_purchase_storekit/CHANGELOG.md b/packages/in_app_purchase/in_app_purchase_storekit/CHANGELOG.md index 21796591786..ee95a778b87 100644 --- a/packages/in_app_purchase/in_app_purchase_storekit/CHANGELOG.md +++ b/packages/in_app_purchase/in_app_purchase_storekit/CHANGELOG.md @@ -1,3 +1,7 @@ +## 0.3.22 + +* Adds 'sync()' and 'countryCode' + ## 0.3.21 * Adds Swift Package Manager compatibility. diff --git a/packages/in_app_purchase/in_app_purchase_storekit/darwin/in_app_purchase_storekit/Sources/in_app_purchase_storekit/StoreKit2/InAppPurchasePlugin+StoreKit2.swift b/packages/in_app_purchase/in_app_purchase_storekit/darwin/in_app_purchase_storekit/Sources/in_app_purchase_storekit/StoreKit2/InAppPurchasePlugin+StoreKit2.swift index 6b419c7f679..98d641eeb8b 100644 --- a/packages/in_app_purchase/in_app_purchase_storekit/darwin/in_app_purchase_storekit/Sources/in_app_purchase_storekit/StoreKit2/InAppPurchasePlugin+StoreKit2.swift +++ b/packages/in_app_purchase/in_app_purchase_storekit/darwin/in_app_purchase_storekit/Sources/in_app_purchase_storekit/StoreKit2/InAppPurchasePlugin+StoreKit2.swift @@ -156,6 +156,16 @@ extension InAppPurchasePlugin: InAppPurchase2API { } } + func sync(completion: @escaping (Result) -> Void) { + Task { + do { + try await AppStore.sync(); + } catch { + fatalError("Failed to sync to the AppStore: \(error)") + } + } + } + /// This Task listens to Transation.updates as shown here /// https://developer.apple.com/documentation/storekit/transaction/3851206-updates /// This function should be called as soon as the app starts to avoid missing any Transactions done outside of the app. diff --git a/packages/in_app_purchase/in_app_purchase_storekit/darwin/in_app_purchase_storekit/Sources/in_app_purchase_storekit/StoreKit2/sk2_pigeon.g.swift b/packages/in_app_purchase/in_app_purchase_storekit/darwin/in_app_purchase_storekit/Sources/in_app_purchase_storekit/StoreKit2/sk2_pigeon.g.swift index d10e7085bbf..173bc74b3f6 100644 --- a/packages/in_app_purchase/in_app_purchase_storekit/darwin/in_app_purchase_storekit/Sources/in_app_purchase_storekit/StoreKit2/sk2_pigeon.g.swift +++ b/packages/in_app_purchase/in_app_purchase_storekit/darwin/in_app_purchase_storekit/Sources/in_app_purchase_storekit/StoreKit2/sk2_pigeon.g.swift @@ -526,6 +526,7 @@ protocol InAppPurchase2API { func stopListeningToTransactions() throws func restorePurchases(completion: @escaping (Result) -> Void) func countryCode(completion: @escaping (Result) -> Void) + func sync(completion: @escaping (Result) -> Void) } /// Generated setup class from Pigeon to handle messages through the `binaryMessenger`. @@ -670,6 +671,21 @@ class InAppPurchase2APISetup { } else { countryCodeChannel.setMessageHandler(nil) } + let syncChannel = FlutterBasicMessageChannel(name: "dev.flutter.pigeon.in_app_purchase_storekit.InAppPurchase2API.sync\(channelSuffix)", binaryMessenger: binaryMessenger, codec: codec) + if let api = api { + syncChannel.setMessageHandler { _, reply in + api.sync { result in + switch result { + case .success: + reply(wrapResult(nil)) + case .failure(let error): + reply(wrapError(error)) + } + } + } + } else { + syncChannel.setMessageHandler(nil) + } } } /// Generated protocol from Pigeon that represents Flutter messages that can be called from Swift. diff --git a/packages/in_app_purchase/in_app_purchase_storekit/example/lib/main.dart b/packages/in_app_purchase/in_app_purchase_storekit/example/lib/main.dart index a6beb31f909..27c58a7ce8a 100644 --- a/packages/in_app_purchase/in_app_purchase_storekit/example/lib/main.dart +++ b/packages/in_app_purchase/in_app_purchase_storekit/example/lib/main.dart @@ -337,7 +337,7 @@ class _MyAppState extends State<_MyApp> { backgroundColor: Theme.of(context).colorScheme.primary, foregroundColor: Colors.white, ), - onPressed: () => _iapStoreKitPlatform.restorePurchases(), + onPressed: () => _iapStoreKitPlatformAddition.sync(), child: const Text('Restore purchases'), ), ], diff --git a/packages/in_app_purchase/in_app_purchase_storekit/lib/src/in_app_purchase_storekit_platform_addition.dart b/packages/in_app_purchase/in_app_purchase_storekit/lib/src/in_app_purchase_storekit_platform_addition.dart index 3b88aacc16e..31c8df42588 100644 --- a/packages/in_app_purchase/in_app_purchase_storekit/lib/src/in_app_purchase_storekit_platform_addition.dart +++ b/packages/in_app_purchase/in_app_purchase_storekit/lib/src/in_app_purchase_storekit_platform_addition.dart @@ -6,13 +6,22 @@ import 'package:in_app_purchase_platform_interface/in_app_purchase_platform_inte import '../in_app_purchase_storekit.dart'; import '../store_kit_wrappers.dart'; +import '../store_kit_2_wrappers.dart'; /// Contains InApp Purchase features that are only available on iOS. class InAppPurchaseStoreKitPlatformAddition extends InAppPurchasePlatformAddition { + /// Synchronizes your app’s transaction information and subscription status + /// with information from the App Store. + /// Storekit 2 only + Future sync() { + return AppStore().sync(); + } + /// Present Code Redemption Sheet. /// /// Available on devices running iOS 14 and iPadOS 14 and later. + /// Available for StoreKit 1 and 2 Future presentCodeRedemptionSheet() { return SKPaymentQueueWrapper().presentCodeRedemptionSheet(); } diff --git a/packages/in_app_purchase/in_app_purchase_storekit/lib/src/sk2_pigeon.g.dart b/packages/in_app_purchase/in_app_purchase_storekit/lib/src/sk2_pigeon.g.dart index 81dda2888e9..f7272838e52 100644 --- a/packages/in_app_purchase/in_app_purchase_storekit/lib/src/sk2_pigeon.g.dart +++ b/packages/in_app_purchase/in_app_purchase_storekit/lib/src/sk2_pigeon.g.dart @@ -939,6 +939,29 @@ class InAppPurchase2API { return (pigeonVar_replyList[0] as String?)!; } } + + Future sync() async { + final String pigeonVar_channelName = 'dev.flutter.pigeon.in_app_purchase_storekit.InAppPurchase2API.sync$pigeonVar_messageChannelSuffix'; + final BasicMessageChannel pigeonVar_channel = BasicMessageChannel( + pigeonVar_channelName, + pigeonChannelCodec, + binaryMessenger: pigeonVar_binaryMessenger, + ); + final Future pigeonVar_sendFuture = pigeonVar_channel.send(null); + final List? pigeonVar_replyList = + await pigeonVar_sendFuture as List?; + if (pigeonVar_replyList == null) { + throw _createConnectionError(pigeonVar_channelName); + } else if (pigeonVar_replyList.length > 1) { + throw PlatformException( + code: pigeonVar_replyList[0]! as String, + message: pigeonVar_replyList[1] as String?, + details: pigeonVar_replyList[2], + ); + } else { + return; + } + } } abstract class InAppPurchase2CallbackAPI { diff --git a/packages/in_app_purchase/in_app_purchase_storekit/lib/src/store_kit_2_wrappers/sk2_appstore_wrapper.dart b/packages/in_app_purchase/in_app_purchase_storekit/lib/src/store_kit_2_wrappers/sk2_appstore_wrapper.dart index a57ad561126..f9b6057547d 100644 --- a/packages/in_app_purchase/in_app_purchase_storekit/lib/src/store_kit_2_wrappers/sk2_appstore_wrapper.dart +++ b/packages/in_app_purchase/in_app_purchase_storekit/lib/src/store_kit_2_wrappers/sk2_appstore_wrapper.dart @@ -15,4 +15,8 @@ final class AppStore { Future canMakePayments() { return _hostApi.canMakePayments(); } + + Future sync() { + return _hostApi.sync(); + } } diff --git a/packages/in_app_purchase/in_app_purchase_storekit/pigeons/sk2_pigeon.dart b/packages/in_app_purchase/in_app_purchase_storekit/pigeons/sk2_pigeon.dart index 177079c77fc..da57a65ee6e 100644 --- a/packages/in_app_purchase/in_app_purchase_storekit/pigeons/sk2_pigeon.dart +++ b/packages/in_app_purchase/in_app_purchase_storekit/pigeons/sk2_pigeon.dart @@ -202,6 +202,9 @@ abstract class InAppPurchase2API { @async String countryCode(); + + @async + void sync(); } @FlutterApi() diff --git a/packages/in_app_purchase/in_app_purchase_storekit/test/fakes/fake_storekit_platform.dart b/packages/in_app_purchase/in_app_purchase_storekit/test/fakes/fake_storekit_platform.dart index ddd210b2f47..bf8773e8bd9 100644 --- a/packages/in_app_purchase/in_app_purchase_storekit/test/fakes/fake_storekit_platform.dart +++ b/packages/in_app_purchase/in_app_purchase_storekit/test/fakes/fake_storekit_platform.dart @@ -399,6 +399,11 @@ class FakeStoreKit2Platform implements TestInAppPurchase2Api { Future countryCode() async { return 'ABC'; } + + @override + Future sync() { + return Future.value(); + } } SK2TransactionMessage createPendingTransaction(String id, {int quantity = 1}) { diff --git a/packages/in_app_purchase/in_app_purchase_storekit/test/sk2_test_api.g.dart b/packages/in_app_purchase/in_app_purchase_storekit/test/sk2_test_api.g.dart index f46f21ab527..d62f39f3c35 100644 --- a/packages/in_app_purchase/in_app_purchase_storekit/test/sk2_test_api.g.dart +++ b/packages/in_app_purchase/in_app_purchase_storekit/test/sk2_test_api.g.dart @@ -127,6 +127,8 @@ abstract class TestInAppPurchase2Api { Future countryCode(); + Future sync(); + static void setUp(TestInAppPurchase2Api? api, {BinaryMessenger? binaryMessenger, String messageChannelSuffix = '',}) { messageChannelSuffix = messageChannelSuffix.isNotEmpty ? '.$messageChannelSuffix' : ''; { @@ -319,5 +321,24 @@ abstract class TestInAppPurchase2Api { }); } } + { + final BasicMessageChannel pigeonVar_channel = BasicMessageChannel( + 'dev.flutter.pigeon.in_app_purchase_storekit.InAppPurchase2API.sync$messageChannelSuffix', pigeonChannelCodec, + binaryMessenger: binaryMessenger); + if (api == null) { + _testBinaryMessengerBinding!.defaultBinaryMessenger.setMockDecodedMessageHandler(pigeonVar_channel, null); + } else { + _testBinaryMessengerBinding!.defaultBinaryMessenger.setMockDecodedMessageHandler(pigeonVar_channel, (Object? message) async { + try { + await api.sync(); + return wrapResponse(empty: true); + } on PlatformException catch (e) { + return wrapResponse(error: e); + } catch (e) { + return wrapResponse(error: PlatformException(code: 'error', message: e.toString())); + } + }); + } + } } } From 6e368063a62e52097fbe9859391aedccfc240283 Mon Sep 17 00:00:00 2001 From: louisehsu Date: Fri, 28 Mar 2025 12:48:22 -0700 Subject: [PATCH 03/13] . --- .../in_app_purchase/in_app_purchase_storekit/CHANGELOG.md | 2 +- .../StoreKit2/InAppPurchasePlugin+StoreKit2.swift | 4 ++-- .../in_app_purchase/in_app_purchase_storekit/pubspec.yaml | 2 +- 3 files changed, 4 insertions(+), 4 deletions(-) diff --git a/packages/in_app_purchase/in_app_purchase_storekit/CHANGELOG.md b/packages/in_app_purchase/in_app_purchase_storekit/CHANGELOG.md index ee95a778b87..888ded48642 100644 --- a/packages/in_app_purchase/in_app_purchase_storekit/CHANGELOG.md +++ b/packages/in_app_purchase/in_app_purchase_storekit/CHANGELOG.md @@ -1,6 +1,6 @@ ## 0.3.22 -* Adds 'sync()' and 'countryCode' +* Adds `sync()` and `countryCode()`. ## 0.3.21 diff --git a/packages/in_app_purchase/in_app_purchase_storekit/darwin/in_app_purchase_storekit/Sources/in_app_purchase_storekit/StoreKit2/InAppPurchasePlugin+StoreKit2.swift b/packages/in_app_purchase/in_app_purchase_storekit/darwin/in_app_purchase_storekit/Sources/in_app_purchase_storekit/StoreKit2/InAppPurchasePlugin+StoreKit2.swift index 98d641eeb8b..32108d4e37c 100644 --- a/packages/in_app_purchase/in_app_purchase_storekit/darwin/in_app_purchase_storekit/Sources/in_app_purchase_storekit/StoreKit2/InAppPurchasePlugin+StoreKit2.swift +++ b/packages/in_app_purchase/in_app_purchase_storekit/darwin/in_app_purchase_storekit/Sources/in_app_purchase_storekit/StoreKit2/InAppPurchasePlugin+StoreKit2.swift @@ -147,7 +147,7 @@ extension InAppPurchasePlugin: InAppPurchase2API { /// Wrapper method around StoreKit2's countryCode() method /// https://developer.apple.com/documentation/storekit/storefront/countrycode - func countryCode(completion: @escaping (Result) -> Void) { + func countryCode(completion: @escaping (Result) -> Void) { Task { guard let currentStorefront = try await Storefront.current else { completion(.failure(fatalError("Could not get current Storefront."))) @@ -156,7 +156,7 @@ extension InAppPurchasePlugin: InAppPurchase2API { } } - func sync(completion: @escaping (Result) -> Void) { + func sync(completion: @escaping (Result) -> Void) { Task { do { try await AppStore.sync(); diff --git a/packages/in_app_purchase/in_app_purchase_storekit/pubspec.yaml b/packages/in_app_purchase/in_app_purchase_storekit/pubspec.yaml index 1807d90c16e..447f9077d11 100644 --- a/packages/in_app_purchase/in_app_purchase_storekit/pubspec.yaml +++ b/packages/in_app_purchase/in_app_purchase_storekit/pubspec.yaml @@ -2,7 +2,7 @@ name: in_app_purchase_storekit description: An implementation for the iOS and macOS platforms of the Flutter `in_app_purchase` plugin. This uses the StoreKit Framework. repository: https://github.com/flutter/packages/tree/main/packages/in_app_purchase/in_app_purchase_storekit issue_tracker: https://github.com/flutter/flutter/issues?q=is%3Aissue+is%3Aopen+label%3A%22p%3A+in_app_purchase%22 -version: 0.3.21 +version: 0.3.22 environment: sdk: ^3.4.0 From bc47383701f9043683e53690f119f9024f074b2c Mon Sep 17 00:00:00 2001 From: louisehsu Date: Fri, 28 Mar 2025 13:33:40 -0700 Subject: [PATCH 04/13] format? --- .../lib/src/in_app_purchase_storekit_platform_addition.dart | 4 ++-- .../lib/src/store_kit_2_wrappers/sk2_appstore_wrapper.dart | 6 +++++- 2 files changed, 7 insertions(+), 3 deletions(-) diff --git a/packages/in_app_purchase/in_app_purchase_storekit/lib/src/in_app_purchase_storekit_platform_addition.dart b/packages/in_app_purchase/in_app_purchase_storekit/lib/src/in_app_purchase_storekit_platform_addition.dart index 31c8df42588..447f41f0a18 100644 --- a/packages/in_app_purchase/in_app_purchase_storekit/lib/src/in_app_purchase_storekit_platform_addition.dart +++ b/packages/in_app_purchase/in_app_purchase_storekit/lib/src/in_app_purchase_storekit_platform_addition.dart @@ -3,10 +3,10 @@ // found in the LICENSE file. import 'package:in_app_purchase_platform_interface/in_app_purchase_platform_interface.dart'; -import '../in_app_purchase_storekit.dart'; -import '../store_kit_wrappers.dart'; +import '../in_app_purchase_storekit.dart'; import '../store_kit_2_wrappers.dart'; +import '../store_kit_wrappers.dart'; /// Contains InApp Purchase features that are only available on iOS. class InAppPurchaseStoreKitPlatformAddition diff --git a/packages/in_app_purchase/in_app_purchase_storekit/lib/src/store_kit_2_wrappers/sk2_appstore_wrapper.dart b/packages/in_app_purchase/in_app_purchase_storekit/lib/src/store_kit_2_wrappers/sk2_appstore_wrapper.dart index f9b6057547d..fc8ef570e5c 100644 --- a/packages/in_app_purchase/in_app_purchase_storekit/lib/src/store_kit_2_wrappers/sk2_appstore_wrapper.dart +++ b/packages/in_app_purchase/in_app_purchase_storekit/lib/src/store_kit_2_wrappers/sk2_appstore_wrapper.dart @@ -11,11 +11,15 @@ InAppPurchase2API _hostApi = InAppPurchase2API(); final class AppStore { /// Dart wrapper for StoreKit2's canMakePayments() /// Returns a bool that indicates whether the person can make purchases. - /// (https://developer.apple.com/documentation/storekit/appstore/3822277-canmakepayments) + /// https://developer.apple.com/documentation/storekit/appstore/3822277-canmakepayments Future canMakePayments() { return _hostApi.canMakePayments(); } + /// Dart wrapper for StoreKit2's sync() + /// Synchronizes your app’s transaction information and subscription status with information from the App Store. + /// Will initiate an authentication pop up. + /// https://developer.apple.com/documentation/storekit/appstore/sync() Future sync() { return _hostApi.sync(); } From e1d8e4a6cf5a84df97a2f2fda5c8ccb571f614be Mon Sep 17 00:00:00 2001 From: louisehsu Date: Fri, 28 Mar 2025 13:55:51 -0700 Subject: [PATCH 05/13] FORMART --- .../InAppPurchasePlugin+StoreKit2.swift | 8 +- .../StoreKit2/sk2_pigeon.g.swift | 78 +++++++++++++------ 2 files changed, 57 insertions(+), 29 deletions(-) diff --git a/packages/in_app_purchase/in_app_purchase_storekit/darwin/in_app_purchase_storekit/Sources/in_app_purchase_storekit/StoreKit2/InAppPurchasePlugin+StoreKit2.swift b/packages/in_app_purchase/in_app_purchase_storekit/darwin/in_app_purchase_storekit/Sources/in_app_purchase_storekit/StoreKit2/InAppPurchasePlugin+StoreKit2.swift index 32108d4e37c..9cae8290f16 100644 --- a/packages/in_app_purchase/in_app_purchase_storekit/darwin/in_app_purchase_storekit/Sources/in_app_purchase_storekit/StoreKit2/InAppPurchasePlugin+StoreKit2.swift +++ b/packages/in_app_purchase/in_app_purchase_storekit/darwin/in_app_purchase_storekit/Sources/in_app_purchase_storekit/StoreKit2/InAppPurchasePlugin+StoreKit2.swift @@ -145,21 +145,21 @@ extension InAppPurchasePlugin: InAppPurchase2API { } } -/// Wrapper method around StoreKit2's countryCode() method -/// https://developer.apple.com/documentation/storekit/storefront/countrycode + /// Wrapper method around StoreKit2's countryCode() method + /// https://developer.apple.com/documentation/storekit/storefront/countrycode func countryCode(completion: @escaping (Result) -> Void) { Task { guard let currentStorefront = try await Storefront.current else { completion(.failure(fatalError("Could not get current Storefront."))) } - return completion(.success(try await currentStorefront.countryCode)); + return completion(.success(try await currentStorefront.countryCode)) } } func sync(completion: @escaping (Result) -> Void) { Task { do { - try await AppStore.sync(); + try await AppStore.sync() } catch { fatalError("Failed to sync to the AppStore: \(error)") } diff --git a/packages/in_app_purchase/in_app_purchase_storekit/darwin/in_app_purchase_storekit/Sources/in_app_purchase_storekit/StoreKit2/sk2_pigeon.g.swift b/packages/in_app_purchase/in_app_purchase_storekit/darwin/in_app_purchase_storekit/Sources/in_app_purchase_storekit/StoreKit2/sk2_pigeon.g.swift index 173bc74b3f6..be43725d954 100644 --- a/packages/in_app_purchase/in_app_purchase_storekit/darwin/in_app_purchase_storekit/Sources/in_app_purchase_storekit/StoreKit2/sk2_pigeon.g.swift +++ b/packages/in_app_purchase/in_app_purchase_storekit/darwin/in_app_purchase_storekit/Sources/in_app_purchase_storekit/StoreKit2/sk2_pigeon.g.swift @@ -59,7 +59,9 @@ private func wrapError(_ error: Any) -> [Any?] { } private func createConnectionError(withChannelName channelName: String) -> PigeonError { - return PigeonError(code: "channel-error", message: "Unable to establish connection on channel: '\(channelName)'.", details: "") + return PigeonError( + code: "channel-error", message: "Unable to establish connection on channel: '\(channelName)'.", + details: "") } private func isNullish(_ value: Any?) -> Bool { @@ -115,7 +117,6 @@ struct SK2SubscriptionOfferMessage { var periodCount: Int64 var paymentMode: SK2SubscriptionOfferPaymentModeMessage - // swift-format-ignore: AlwaysUseLowerCamelCase static func fromList(_ pigeonVar_list: [Any?]) -> SK2SubscriptionOfferMessage? { let id: String? = nilOrValue(pigeonVar_list[0]) @@ -153,7 +154,6 @@ struct SK2SubscriptionPeriodMessage { /// The unit of time that this period represents. var unit: SK2SubscriptionPeriodUnitMessage - // swift-format-ignore: AlwaysUseLowerCamelCase static func fromList(_ pigeonVar_list: [Any?]) -> SK2SubscriptionPeriodMessage? { let value = pigeonVar_list[0] as! Int64 @@ -181,7 +181,6 @@ struct SK2SubscriptionInfoMessage { /// The duration that this subscription lasts before auto-renewing. var subscriptionPeriod: SK2SubscriptionPeriodMessage - // swift-format-ignore: AlwaysUseLowerCamelCase static func fromList(_ pigeonVar_list: [Any?]) -> SK2SubscriptionInfoMessage? { let promotionalOffers = pigeonVar_list[0] as! [SK2SubscriptionOfferMessage] @@ -225,7 +224,6 @@ struct SK2ProductMessage { /// The currency and locale information for this product var priceLocale: SK2PriceLocaleMessage - // swift-format-ignore: AlwaysUseLowerCamelCase static func fromList(_ pigeonVar_list: [Any?]) -> SK2ProductMessage? { let id = pigeonVar_list[0] as! String @@ -267,7 +265,6 @@ struct SK2PriceLocaleMessage { var currencyCode: String var currencySymbol: String - // swift-format-ignore: AlwaysUseLowerCamelCase static func fromList(_ pigeonVar_list: [Any?]) -> SK2PriceLocaleMessage? { let currencyCode = pigeonVar_list[0] as! String @@ -291,7 +288,6 @@ struct SK2ProductPurchaseOptionsMessage { var appAccountToken: String? = nil var quantity: Int64? = nil - // swift-format-ignore: AlwaysUseLowerCamelCase static func fromList(_ pigeonVar_list: [Any?]) -> SK2ProductPurchaseOptionsMessage? { let appAccountToken: String? = nilOrValue(pigeonVar_list[0]) @@ -324,7 +320,6 @@ struct SK2TransactionMessage { var error: SK2ErrorMessage? = nil var jsonRepresentation: String? = nil - // swift-format-ignore: AlwaysUseLowerCamelCase static func fromList(_ pigeonVar_list: [Any?]) -> SK2TransactionMessage? { let id = pigeonVar_list[0] as! Int64 @@ -376,7 +371,6 @@ struct SK2ErrorMessage { var domain: String var userInfo: [String: Any]? = nil - // swift-format-ignore: AlwaysUseLowerCamelCase static func fromList(_ pigeonVar_list: [Any?]) -> SK2ErrorMessage? { let code = pigeonVar_list[0] as! Int64 @@ -514,12 +508,14 @@ class Sk2PigeonPigeonCodec: FlutterStandardMessageCodec, @unchecked Sendable { static let shared = Sk2PigeonPigeonCodec(readerWriter: Sk2PigeonPigeonCodecReaderWriter()) } - /// Generated protocol from Pigeon that represents a handler of messages from Flutter. protocol InAppPurchase2API { func canMakePayments() throws -> Bool - func products(identifiers: [String], completion: @escaping (Result<[SK2ProductMessage], Error>) -> Void) - func purchase(id: String, options: SK2ProductPurchaseOptionsMessage?, completion: @escaping (Result) -> Void) + func products( + identifiers: [String], completion: @escaping (Result<[SK2ProductMessage], Error>) -> Void) + func purchase( + id: String, options: SK2ProductPurchaseOptionsMessage?, + completion: @escaping (Result) -> Void) func transactions(completion: @escaping (Result<[SK2TransactionMessage], Error>) -> Void) func finish(id: Int64, completion: @escaping (Result) -> Void) func startListeningToTransactions() throws @@ -548,7 +544,10 @@ class InAppPurchase2APISetup { } else { canMakePaymentsChannel.setMessageHandler(nil) } - let productsChannel = FlutterBasicMessageChannel(name: "dev.flutter.pigeon.in_app_purchase_storekit.InAppPurchase2API.products\(channelSuffix)", binaryMessenger: binaryMessenger, codec: codec) + let productsChannel = FlutterBasicMessageChannel( + name: + "dev.flutter.pigeon.in_app_purchase_storekit.InAppPurchase2API.products\(channelSuffix)", + binaryMessenger: binaryMessenger, codec: codec) if let api = api { productsChannel.setMessageHandler { message, reply in let args = message as! [Any?] @@ -565,7 +564,10 @@ class InAppPurchase2APISetup { } else { productsChannel.setMessageHandler(nil) } - let purchaseChannel = FlutterBasicMessageChannel(name: "dev.flutter.pigeon.in_app_purchase_storekit.InAppPurchase2API.purchase\(channelSuffix)", binaryMessenger: binaryMessenger, codec: codec) + let purchaseChannel = FlutterBasicMessageChannel( + name: + "dev.flutter.pigeon.in_app_purchase_storekit.InAppPurchase2API.purchase\(channelSuffix)", + binaryMessenger: binaryMessenger, codec: codec) if let api = api { purchaseChannel.setMessageHandler { message, reply in let args = message as! [Any?] @@ -583,7 +585,10 @@ class InAppPurchase2APISetup { } else { purchaseChannel.setMessageHandler(nil) } - let transactionsChannel = FlutterBasicMessageChannel(name: "dev.flutter.pigeon.in_app_purchase_storekit.InAppPurchase2API.transactions\(channelSuffix)", binaryMessenger: binaryMessenger, codec: codec) + let transactionsChannel = FlutterBasicMessageChannel( + name: + "dev.flutter.pigeon.in_app_purchase_storekit.InAppPurchase2API.transactions\(channelSuffix)", + binaryMessenger: binaryMessenger, codec: codec) if let api = api { transactionsChannel.setMessageHandler { _, reply in api.transactions { result in @@ -598,7 +603,9 @@ class InAppPurchase2APISetup { } else { transactionsChannel.setMessageHandler(nil) } - let finishChannel = FlutterBasicMessageChannel(name: "dev.flutter.pigeon.in_app_purchase_storekit.InAppPurchase2API.finish\(channelSuffix)", binaryMessenger: binaryMessenger, codec: codec) + let finishChannel = FlutterBasicMessageChannel( + name: "dev.flutter.pigeon.in_app_purchase_storekit.InAppPurchase2API.finish\(channelSuffix)", + binaryMessenger: binaryMessenger, codec: codec) if let api = api { finishChannel.setMessageHandler { message, reply in let args = message as! [Any?] @@ -615,7 +622,10 @@ class InAppPurchase2APISetup { } else { finishChannel.setMessageHandler(nil) } - let startListeningToTransactionsChannel = FlutterBasicMessageChannel(name: "dev.flutter.pigeon.in_app_purchase_storekit.InAppPurchase2API.startListeningToTransactions\(channelSuffix)", binaryMessenger: binaryMessenger, codec: codec) + let startListeningToTransactionsChannel = FlutterBasicMessageChannel( + name: + "dev.flutter.pigeon.in_app_purchase_storekit.InAppPurchase2API.startListeningToTransactions\(channelSuffix)", + binaryMessenger: binaryMessenger, codec: codec) if let api = api { startListeningToTransactionsChannel.setMessageHandler { _, reply in do { @@ -628,7 +638,10 @@ class InAppPurchase2APISetup { } else { startListeningToTransactionsChannel.setMessageHandler(nil) } - let stopListeningToTransactionsChannel = FlutterBasicMessageChannel(name: "dev.flutter.pigeon.in_app_purchase_storekit.InAppPurchase2API.stopListeningToTransactions\(channelSuffix)", binaryMessenger: binaryMessenger, codec: codec) + let stopListeningToTransactionsChannel = FlutterBasicMessageChannel( + name: + "dev.flutter.pigeon.in_app_purchase_storekit.InAppPurchase2API.stopListeningToTransactions\(channelSuffix)", + binaryMessenger: binaryMessenger, codec: codec) if let api = api { stopListeningToTransactionsChannel.setMessageHandler { _, reply in do { @@ -641,7 +654,10 @@ class InAppPurchase2APISetup { } else { stopListeningToTransactionsChannel.setMessageHandler(nil) } - let restorePurchasesChannel = FlutterBasicMessageChannel(name: "dev.flutter.pigeon.in_app_purchase_storekit.InAppPurchase2API.restorePurchases\(channelSuffix)", binaryMessenger: binaryMessenger, codec: codec) + let restorePurchasesChannel = FlutterBasicMessageChannel( + name: + "dev.flutter.pigeon.in_app_purchase_storekit.InAppPurchase2API.restorePurchases\(channelSuffix)", + binaryMessenger: binaryMessenger, codec: codec) if let api = api { restorePurchasesChannel.setMessageHandler { _, reply in api.restorePurchases { result in @@ -656,7 +672,10 @@ class InAppPurchase2APISetup { } else { restorePurchasesChannel.setMessageHandler(nil) } - let countryCodeChannel = FlutterBasicMessageChannel(name: "dev.flutter.pigeon.in_app_purchase_storekit.InAppPurchase2API.countryCode\(channelSuffix)", binaryMessenger: binaryMessenger, codec: codec) + let countryCodeChannel = FlutterBasicMessageChannel( + name: + "dev.flutter.pigeon.in_app_purchase_storekit.InAppPurchase2API.countryCode\(channelSuffix)", + binaryMessenger: binaryMessenger, codec: codec) if let api = api { countryCodeChannel.setMessageHandler { _, reply in api.countryCode { result in @@ -671,7 +690,9 @@ class InAppPurchase2APISetup { } else { countryCodeChannel.setMessageHandler(nil) } - let syncChannel = FlutterBasicMessageChannel(name: "dev.flutter.pigeon.in_app_purchase_storekit.InAppPurchase2API.sync\(channelSuffix)", binaryMessenger: binaryMessenger, codec: codec) + let syncChannel = FlutterBasicMessageChannel( + name: "dev.flutter.pigeon.in_app_purchase_storekit.InAppPurchase2API.sync\(channelSuffix)", + binaryMessenger: binaryMessenger, codec: codec) if let api = api { syncChannel.setMessageHandler { _, reply in api.sync { result in @@ -690,7 +711,9 @@ class InAppPurchase2APISetup { } /// Generated protocol from Pigeon that represents Flutter messages that can be called from Swift. protocol InAppPurchase2CallbackAPIProtocol { - func onTransactionsUpdated(newTransactions newTransactionsArg: [SK2TransactionMessage], completion: @escaping (Result) -> Void) + func onTransactionsUpdated( + newTransactions newTransactionsArg: [SK2TransactionMessage], + completion: @escaping (Result) -> Void) } class InAppPurchase2CallbackAPI: InAppPurchase2CallbackAPIProtocol { private let binaryMessenger: FlutterBinaryMessenger @@ -702,9 +725,14 @@ class InAppPurchase2CallbackAPI: InAppPurchase2CallbackAPIProtocol { var codec: Sk2PigeonPigeonCodec { return Sk2PigeonPigeonCodec.shared } - func onTransactionsUpdated(newTransactions newTransactionsArg: [SK2TransactionMessage], completion: @escaping (Result) -> Void) { - let channelName: String = "dev.flutter.pigeon.in_app_purchase_storekit.InAppPurchase2CallbackAPI.onTransactionsUpdated\(messageChannelSuffix)" - let channel = FlutterBasicMessageChannel(name: channelName, binaryMessenger: binaryMessenger, codec: codec) + func onTransactionsUpdated( + newTransactions newTransactionsArg: [SK2TransactionMessage], + completion: @escaping (Result) -> Void + ) { + let channelName: String = + "dev.flutter.pigeon.in_app_purchase_storekit.InAppPurchase2CallbackAPI.onTransactionsUpdated\(messageChannelSuffix)" + let channel = FlutterBasicMessageChannel( + name: channelName, binaryMessenger: binaryMessenger, codec: codec) channel.sendMessage([newTransactionsArg] as [Any?]) { response in guard let listResponse = response as? [Any?] else { completion(.failure(createConnectionError(withChannelName: channelName))) From 6d4f3580fe070e2600e31c0e4d9fbaf59b751ba7 Mon Sep 17 00:00:00 2001 From: louisehsu Date: Mon, 31 Mar 2025 15:21:34 -0700 Subject: [PATCH 06/13] dart format --- .../lib/src/sk2_pigeon.g.dart | 340 ++++++++++-------- .../test/sk2_test_api.g.dart | 292 +++++++++------ 2 files changed, 383 insertions(+), 249 deletions(-) diff --git a/packages/in_app_purchase/in_app_purchase_storekit/lib/src/sk2_pigeon.g.dart b/packages/in_app_purchase/in_app_purchase_storekit/lib/src/sk2_pigeon.g.dart index f7272838e52..a27af1af409 100644 --- a/packages/in_app_purchase/in_app_purchase_storekit/lib/src/sk2_pigeon.g.dart +++ b/packages/in_app_purchase/in_app_purchase_storekit/lib/src/sk2_pigeon.g.dart @@ -18,7 +18,8 @@ PlatformException _createConnectionError(String channelName) { ); } -List wrapResponse({Object? result, PlatformException? error, bool empty = false}) { +List wrapResponse( + {Object? result, PlatformException? error, bool empty = false}) { if (empty) { return []; } @@ -27,29 +28,33 @@ List wrapResponse({Object? result, PlatformException? error, bool empty } return [error.code, error.message, error.details]; } + bool _deepEquals(Object? a, Object? b) { if (a is List && b is List) { return a.length == b.length && a.indexed - .every(((int, dynamic) item) => _deepEquals(item.$2, b[item.$1])); + .every(((int, dynamic) item) => _deepEquals(item.$2, b[item.$1])); } if (a is Map && b is Map) { final Iterable keys = (a as Map).keys; - return a.length == b.length && keys.every((Object? key) => - (b as Map).containsKey(key) && - _deepEquals(a[key], b[key])); + return a.length == b.length && + keys.every((Object? key) => + (b as Map).containsKey(key) && + _deepEquals(a[key], b[key])); } return a == b; } - enum SK2ProductTypeMessage { /// A consumable in-app purchase. consumable, + /// A non-consumable in-app purchase. nonConsumable, + /// A non-renewing subscription. nonRenewable, + /// An auto-renewable subscription. autoRenewable, } @@ -112,7 +117,8 @@ class SK2SubscriptionOfferMessage { } Object encode() { - return _toList(); } + return _toList(); + } static SK2SubscriptionOfferMessage decode(Object result) { result as List; @@ -129,25 +135,24 @@ class SK2SubscriptionOfferMessage { @override // ignore: avoid_equals_and_hash_code_on_mutable_classes bool operator ==(Object other) { - if (other is! SK2SubscriptionOfferMessage || other.runtimeType != runtimeType) { + if (other is! SK2SubscriptionOfferMessage || + other.runtimeType != runtimeType) { return false; } if (identical(this, other)) { return true; } - return - id == other.id - && price == other.price - && type == other.type - && period == other.period - && periodCount == other.periodCount - && paymentMode == other.paymentMode; + return id == other.id && + price == other.price && + type == other.type && + period == other.period && + periodCount == other.periodCount && + paymentMode == other.paymentMode; } @override // ignore: avoid_equals_and_hash_code_on_mutable_classes - int get hashCode => Object.hashAll(_toList()) -; + int get hashCode => Object.hashAll(_toList()); } class SK2SubscriptionPeriodMessage { @@ -170,7 +175,8 @@ class SK2SubscriptionPeriodMessage { } Object encode() { - return _toList(); } + return _toList(); + } static SK2SubscriptionPeriodMessage decode(Object result) { result as List; @@ -183,21 +189,19 @@ class SK2SubscriptionPeriodMessage { @override // ignore: avoid_equals_and_hash_code_on_mutable_classes bool operator ==(Object other) { - if (other is! SK2SubscriptionPeriodMessage || other.runtimeType != runtimeType) { + if (other is! SK2SubscriptionPeriodMessage || + other.runtimeType != runtimeType) { return false; } if (identical(this, other)) { return true; } - return - value == other.value - && unit == other.unit; + return value == other.value && unit == other.unit; } @override // ignore: avoid_equals_and_hash_code_on_mutable_classes - int get hashCode => Object.hashAll(_toList()) -; + int get hashCode => Object.hashAll(_toList()); } class SK2SubscriptionInfoMessage { @@ -225,12 +229,14 @@ class SK2SubscriptionInfoMessage { } Object encode() { - return _toList(); } + return _toList(); + } static SK2SubscriptionInfoMessage decode(Object result) { result as List; return SK2SubscriptionInfoMessage( - promotionalOffers: (result[0] as List?)!.cast(), + promotionalOffers: + (result[0] as List?)!.cast(), subscriptionGroupID: result[1]! as String, subscriptionPeriod: result[2]! as SK2SubscriptionPeriodMessage, ); @@ -239,22 +245,21 @@ class SK2SubscriptionInfoMessage { @override // ignore: avoid_equals_and_hash_code_on_mutable_classes bool operator ==(Object other) { - if (other is! SK2SubscriptionInfoMessage || other.runtimeType != runtimeType) { + if (other is! SK2SubscriptionInfoMessage || + other.runtimeType != runtimeType) { return false; } if (identical(this, other)) { return true; } - return - _deepEquals(promotionalOffers, other.promotionalOffers) - && subscriptionGroupID == other.subscriptionGroupID - && subscriptionPeriod == other.subscriptionPeriod; + return _deepEquals(promotionalOffers, other.promotionalOffers) && + subscriptionGroupID == other.subscriptionGroupID && + subscriptionPeriod == other.subscriptionPeriod; } @override // ignore: avoid_equals_and_hash_code_on_mutable_classes - int get hashCode => Object.hashAll(_toList()) -; + int get hashCode => Object.hashAll(_toList()); } /// A Pigeon message class representing a Product @@ -309,7 +314,8 @@ class SK2ProductMessage { } Object encode() { - return _toList(); } + return _toList(); + } static SK2ProductMessage decode(Object result) { result as List; @@ -334,21 +340,19 @@ class SK2ProductMessage { if (identical(this, other)) { return true; } - return - id == other.id - && displayName == other.displayName - && description == other.description - && price == other.price - && displayPrice == other.displayPrice - && type == other.type - && subscription == other.subscription - && priceLocale == other.priceLocale; + return id == other.id && + displayName == other.displayName && + description == other.description && + price == other.price && + displayPrice == other.displayPrice && + type == other.type && + subscription == other.subscription && + priceLocale == other.priceLocale; } @override // ignore: avoid_equals_and_hash_code_on_mutable_classes - int get hashCode => Object.hashAll(_toList()) -; + int get hashCode => Object.hashAll(_toList()); } class SK2PriceLocaleMessage { @@ -369,7 +373,8 @@ class SK2PriceLocaleMessage { } Object encode() { - return _toList(); } + return _toList(); + } static SK2PriceLocaleMessage decode(Object result) { result as List; @@ -388,15 +393,13 @@ class SK2PriceLocaleMessage { if (identical(this, other)) { return true; } - return - currencyCode == other.currencyCode - && currencySymbol == other.currencySymbol; + return currencyCode == other.currencyCode && + currencySymbol == other.currencySymbol; } @override // ignore: avoid_equals_and_hash_code_on_mutable_classes - int get hashCode => Object.hashAll(_toList()) -; + int get hashCode => Object.hashAll(_toList()); } class SK2ProductPurchaseOptionsMessage { @@ -417,7 +420,8 @@ class SK2ProductPurchaseOptionsMessage { } Object encode() { - return _toList(); } + return _toList(); + } static SK2ProductPurchaseOptionsMessage decode(Object result) { result as List; @@ -430,21 +434,20 @@ class SK2ProductPurchaseOptionsMessage { @override // ignore: avoid_equals_and_hash_code_on_mutable_classes bool operator ==(Object other) { - if (other is! SK2ProductPurchaseOptionsMessage || other.runtimeType != runtimeType) { + if (other is! SK2ProductPurchaseOptionsMessage || + other.runtimeType != runtimeType) { return false; } if (identical(this, other)) { return true; } - return - appAccountToken == other.appAccountToken - && quantity == other.quantity; + return appAccountToken == other.appAccountToken && + quantity == other.quantity; } @override // ignore: avoid_equals_and_hash_code_on_mutable_classes - int get hashCode => Object.hashAll(_toList()) -; + int get hashCode => Object.hashAll(_toList()); } class SK2TransactionMessage { @@ -501,7 +504,8 @@ class SK2TransactionMessage { } Object encode() { - return _toList(); } + return _toList(); + } static SK2TransactionMessage decode(Object result) { result as List; @@ -529,24 +533,22 @@ class SK2TransactionMessage { if (identical(this, other)) { return true; } - return - id == other.id - && originalId == other.originalId - && productId == other.productId - && purchaseDate == other.purchaseDate - && expirationDate == other.expirationDate - && purchasedQuantity == other.purchasedQuantity - && appAccountToken == other.appAccountToken - && restoring == other.restoring - && receiptData == other.receiptData - && error == other.error - && jsonRepresentation == other.jsonRepresentation; + return id == other.id && + originalId == other.originalId && + productId == other.productId && + purchaseDate == other.purchaseDate && + expirationDate == other.expirationDate && + purchasedQuantity == other.purchasedQuantity && + appAccountToken == other.appAccountToken && + restoring == other.restoring && + receiptData == other.receiptData && + error == other.error && + jsonRepresentation == other.jsonRepresentation; } @override // ignore: avoid_equals_and_hash_code_on_mutable_classes - int get hashCode => Object.hashAll(_toList()) -; + int get hashCode => Object.hashAll(_toList()); } class SK2ErrorMessage { @@ -571,7 +573,8 @@ class SK2ErrorMessage { } Object encode() { - return _toList(); } + return _toList(); + } static SK2ErrorMessage decode(Object result) { result as List; @@ -591,19 +594,16 @@ class SK2ErrorMessage { if (identical(this, other)) { return true; } - return - code == other.code - && domain == other.domain - && _deepEquals(userInfo, other.userInfo); + return code == other.code && + domain == other.domain && + _deepEquals(userInfo, other.userInfo); } @override // ignore: avoid_equals_and_hash_code_on_mutable_classes - int get hashCode => Object.hashAll(_toList()) -; + int get hashCode => Object.hashAll(_toList()); } - class _PigeonCodec extends StandardMessageCodec { const _PigeonCodec(); @override @@ -611,43 +611,43 @@ class _PigeonCodec extends StandardMessageCodec { if (value is int) { buffer.putUint8(4); buffer.putInt64(value); - } else if (value is SK2ProductTypeMessage) { + } else if (value is SK2ProductTypeMessage) { buffer.putUint8(129); writeValue(buffer, value.index); - } else if (value is SK2SubscriptionOfferTypeMessage) { + } else if (value is SK2SubscriptionOfferTypeMessage) { buffer.putUint8(130); writeValue(buffer, value.index); - } else if (value is SK2SubscriptionOfferPaymentModeMessage) { + } else if (value is SK2SubscriptionOfferPaymentModeMessage) { buffer.putUint8(131); writeValue(buffer, value.index); - } else if (value is SK2SubscriptionPeriodUnitMessage) { + } else if (value is SK2SubscriptionPeriodUnitMessage) { buffer.putUint8(132); writeValue(buffer, value.index); - } else if (value is SK2ProductPurchaseResultMessage) { + } else if (value is SK2ProductPurchaseResultMessage) { buffer.putUint8(133); writeValue(buffer, value.index); - } else if (value is SK2SubscriptionOfferMessage) { + } else if (value is SK2SubscriptionOfferMessage) { buffer.putUint8(134); writeValue(buffer, value.encode()); - } else if (value is SK2SubscriptionPeriodMessage) { + } else if (value is SK2SubscriptionPeriodMessage) { buffer.putUint8(135); writeValue(buffer, value.encode()); - } else if (value is SK2SubscriptionInfoMessage) { + } else if (value is SK2SubscriptionInfoMessage) { buffer.putUint8(136); writeValue(buffer, value.encode()); - } else if (value is SK2ProductMessage) { + } else if (value is SK2ProductMessage) { buffer.putUint8(137); writeValue(buffer, value.encode()); - } else if (value is SK2PriceLocaleMessage) { + } else if (value is SK2PriceLocaleMessage) { buffer.putUint8(138); writeValue(buffer, value.encode()); - } else if (value is SK2ProductPurchaseOptionsMessage) { + } else if (value is SK2ProductPurchaseOptionsMessage) { buffer.putUint8(139); writeValue(buffer, value.encode()); - } else if (value is SK2TransactionMessage) { + } else if (value is SK2TransactionMessage) { buffer.putUint8(140); writeValue(buffer, value.encode()); - } else if (value is SK2ErrorMessage) { + } else if (value is SK2ErrorMessage) { buffer.putUint8(141); writeValue(buffer, value.encode()); } else { @@ -658,36 +658,44 @@ class _PigeonCodec extends StandardMessageCodec { @override Object? readValueOfType(int type, ReadBuffer buffer) { switch (type) { - case 129: + case 129: final int? value = readValue(buffer) as int?; return value == null ? null : SK2ProductTypeMessage.values[value]; - case 130: + case 130: final int? value = readValue(buffer) as int?; - return value == null ? null : SK2SubscriptionOfferTypeMessage.values[value]; - case 131: + return value == null + ? null + : SK2SubscriptionOfferTypeMessage.values[value]; + case 131: final int? value = readValue(buffer) as int?; - return value == null ? null : SK2SubscriptionOfferPaymentModeMessage.values[value]; - case 132: + return value == null + ? null + : SK2SubscriptionOfferPaymentModeMessage.values[value]; + case 132: final int? value = readValue(buffer) as int?; - return value == null ? null : SK2SubscriptionPeriodUnitMessage.values[value]; - case 133: + return value == null + ? null + : SK2SubscriptionPeriodUnitMessage.values[value]; + case 133: final int? value = readValue(buffer) as int?; - return value == null ? null : SK2ProductPurchaseResultMessage.values[value]; - case 134: + return value == null + ? null + : SK2ProductPurchaseResultMessage.values[value]; + case 134: return SK2SubscriptionOfferMessage.decode(readValue(buffer)!); - case 135: + case 135: return SK2SubscriptionPeriodMessage.decode(readValue(buffer)!); - case 136: + case 136: return SK2SubscriptionInfoMessage.decode(readValue(buffer)!); - case 137: + case 137: return SK2ProductMessage.decode(readValue(buffer)!); - case 138: + case 138: return SK2PriceLocaleMessage.decode(readValue(buffer)!); - case 139: + case 139: return SK2ProductPurchaseOptionsMessage.decode(readValue(buffer)!); - case 140: + case 140: return SK2TransactionMessage.decode(readValue(buffer)!); - case 141: + case 141: return SK2ErrorMessage.decode(readValue(buffer)!); default: return super.readValueOfType(type, buffer); @@ -699,9 +707,11 @@ class InAppPurchase2API { /// Constructor for [InAppPurchase2API]. The [binaryMessenger] named argument is /// available for dependency injection. If it is left null, the default /// BinaryMessenger will be used which routes to the host platform. - InAppPurchase2API({BinaryMessenger? binaryMessenger, String messageChannelSuffix = ''}) + InAppPurchase2API( + {BinaryMessenger? binaryMessenger, String messageChannelSuffix = ''}) : pigeonVar_binaryMessenger = binaryMessenger, - pigeonVar_messageChannelSuffix = messageChannelSuffix.isNotEmpty ? '.$messageChannelSuffix' : ''; + pigeonVar_messageChannelSuffix = + messageChannelSuffix.isNotEmpty ? '.$messageChannelSuffix' : ''; final BinaryMessenger? pigeonVar_binaryMessenger; static const MessageCodec pigeonChannelCodec = _PigeonCodec(); @@ -709,8 +719,10 @@ class InAppPurchase2API { final String pigeonVar_messageChannelSuffix; Future canMakePayments() async { - final String pigeonVar_channelName = 'dev.flutter.pigeon.in_app_purchase_storekit.InAppPurchase2API.canMakePayments$pigeonVar_messageChannelSuffix'; - final BasicMessageChannel pigeonVar_channel = BasicMessageChannel( + final String pigeonVar_channelName = + 'dev.flutter.pigeon.in_app_purchase_storekit.InAppPurchase2API.canMakePayments$pigeonVar_messageChannelSuffix'; + final BasicMessageChannel pigeonVar_channel = + BasicMessageChannel( pigeonVar_channelName, pigeonChannelCodec, binaryMessenger: pigeonVar_binaryMessenger, @@ -737,13 +749,16 @@ class InAppPurchase2API { } Future> products(List identifiers) async { - final String pigeonVar_channelName = 'dev.flutter.pigeon.in_app_purchase_storekit.InAppPurchase2API.products$pigeonVar_messageChannelSuffix'; - final BasicMessageChannel pigeonVar_channel = BasicMessageChannel( + final String pigeonVar_channelName = + 'dev.flutter.pigeon.in_app_purchase_storekit.InAppPurchase2API.products$pigeonVar_messageChannelSuffix'; + final BasicMessageChannel pigeonVar_channel = + BasicMessageChannel( pigeonVar_channelName, pigeonChannelCodec, binaryMessenger: pigeonVar_binaryMessenger, ); - final Future pigeonVar_sendFuture = pigeonVar_channel.send([identifiers]); + final Future pigeonVar_sendFuture = + pigeonVar_channel.send([identifiers]); final List? pigeonVar_replyList = await pigeonVar_sendFuture as List?; if (pigeonVar_replyList == null) { @@ -760,18 +775,23 @@ class InAppPurchase2API { message: 'Host platform returned null value for non-null return value.', ); } else { - return (pigeonVar_replyList[0] as List?)!.cast(); + return (pigeonVar_replyList[0] as List?)! + .cast(); } } - Future purchase(String id, {SK2ProductPurchaseOptionsMessage? options}) async { - final String pigeonVar_channelName = 'dev.flutter.pigeon.in_app_purchase_storekit.InAppPurchase2API.purchase$pigeonVar_messageChannelSuffix'; - final BasicMessageChannel pigeonVar_channel = BasicMessageChannel( + Future purchase(String id, + {SK2ProductPurchaseOptionsMessage? options}) async { + final String pigeonVar_channelName = + 'dev.flutter.pigeon.in_app_purchase_storekit.InAppPurchase2API.purchase$pigeonVar_messageChannelSuffix'; + final BasicMessageChannel pigeonVar_channel = + BasicMessageChannel( pigeonVar_channelName, pigeonChannelCodec, binaryMessenger: pigeonVar_binaryMessenger, ); - final Future pigeonVar_sendFuture = pigeonVar_channel.send([id, options]); + final Future pigeonVar_sendFuture = + pigeonVar_channel.send([id, options]); final List? pigeonVar_replyList = await pigeonVar_sendFuture as List?; if (pigeonVar_replyList == null) { @@ -793,8 +813,10 @@ class InAppPurchase2API { } Future> transactions() async { - final String pigeonVar_channelName = 'dev.flutter.pigeon.in_app_purchase_storekit.InAppPurchase2API.transactions$pigeonVar_messageChannelSuffix'; - final BasicMessageChannel pigeonVar_channel = BasicMessageChannel( + final String pigeonVar_channelName = + 'dev.flutter.pigeon.in_app_purchase_storekit.InAppPurchase2API.transactions$pigeonVar_messageChannelSuffix'; + final BasicMessageChannel pigeonVar_channel = + BasicMessageChannel( pigeonVar_channelName, pigeonChannelCodec, binaryMessenger: pigeonVar_binaryMessenger, @@ -816,18 +838,22 @@ class InAppPurchase2API { message: 'Host platform returned null value for non-null return value.', ); } else { - return (pigeonVar_replyList[0] as List?)!.cast(); + return (pigeonVar_replyList[0] as List?)! + .cast(); } } Future finish(int id) async { - final String pigeonVar_channelName = 'dev.flutter.pigeon.in_app_purchase_storekit.InAppPurchase2API.finish$pigeonVar_messageChannelSuffix'; - final BasicMessageChannel pigeonVar_channel = BasicMessageChannel( + final String pigeonVar_channelName = + 'dev.flutter.pigeon.in_app_purchase_storekit.InAppPurchase2API.finish$pigeonVar_messageChannelSuffix'; + final BasicMessageChannel pigeonVar_channel = + BasicMessageChannel( pigeonVar_channelName, pigeonChannelCodec, binaryMessenger: pigeonVar_binaryMessenger, ); - final Future pigeonVar_sendFuture = pigeonVar_channel.send([id]); + final Future pigeonVar_sendFuture = + pigeonVar_channel.send([id]); final List? pigeonVar_replyList = await pigeonVar_sendFuture as List?; if (pigeonVar_replyList == null) { @@ -844,8 +870,10 @@ class InAppPurchase2API { } Future startListeningToTransactions() async { - final String pigeonVar_channelName = 'dev.flutter.pigeon.in_app_purchase_storekit.InAppPurchase2API.startListeningToTransactions$pigeonVar_messageChannelSuffix'; - final BasicMessageChannel pigeonVar_channel = BasicMessageChannel( + final String pigeonVar_channelName = + 'dev.flutter.pigeon.in_app_purchase_storekit.InAppPurchase2API.startListeningToTransactions$pigeonVar_messageChannelSuffix'; + final BasicMessageChannel pigeonVar_channel = + BasicMessageChannel( pigeonVar_channelName, pigeonChannelCodec, binaryMessenger: pigeonVar_binaryMessenger, @@ -867,8 +895,10 @@ class InAppPurchase2API { } Future stopListeningToTransactions() async { - final String pigeonVar_channelName = 'dev.flutter.pigeon.in_app_purchase_storekit.InAppPurchase2API.stopListeningToTransactions$pigeonVar_messageChannelSuffix'; - final BasicMessageChannel pigeonVar_channel = BasicMessageChannel( + final String pigeonVar_channelName = + 'dev.flutter.pigeon.in_app_purchase_storekit.InAppPurchase2API.stopListeningToTransactions$pigeonVar_messageChannelSuffix'; + final BasicMessageChannel pigeonVar_channel = + BasicMessageChannel( pigeonVar_channelName, pigeonChannelCodec, binaryMessenger: pigeonVar_binaryMessenger, @@ -890,8 +920,10 @@ class InAppPurchase2API { } Future restorePurchases() async { - final String pigeonVar_channelName = 'dev.flutter.pigeon.in_app_purchase_storekit.InAppPurchase2API.restorePurchases$pigeonVar_messageChannelSuffix'; - final BasicMessageChannel pigeonVar_channel = BasicMessageChannel( + final String pigeonVar_channelName = + 'dev.flutter.pigeon.in_app_purchase_storekit.InAppPurchase2API.restorePurchases$pigeonVar_messageChannelSuffix'; + final BasicMessageChannel pigeonVar_channel = + BasicMessageChannel( pigeonVar_channelName, pigeonChannelCodec, binaryMessenger: pigeonVar_binaryMessenger, @@ -913,8 +945,10 @@ class InAppPurchase2API { } Future countryCode() async { - final String pigeonVar_channelName = 'dev.flutter.pigeon.in_app_purchase_storekit.InAppPurchase2API.countryCode$pigeonVar_messageChannelSuffix'; - final BasicMessageChannel pigeonVar_channel = BasicMessageChannel( + final String pigeonVar_channelName = + 'dev.flutter.pigeon.in_app_purchase_storekit.InAppPurchase2API.countryCode$pigeonVar_messageChannelSuffix'; + final BasicMessageChannel pigeonVar_channel = + BasicMessageChannel( pigeonVar_channelName, pigeonChannelCodec, binaryMessenger: pigeonVar_binaryMessenger, @@ -941,8 +975,10 @@ class InAppPurchase2API { } Future sync() async { - final String pigeonVar_channelName = 'dev.flutter.pigeon.in_app_purchase_storekit.InAppPurchase2API.sync$pigeonVar_messageChannelSuffix'; - final BasicMessageChannel pigeonVar_channel = BasicMessageChannel( + final String pigeonVar_channelName = + 'dev.flutter.pigeon.in_app_purchase_storekit.InAppPurchase2API.sync$pigeonVar_messageChannelSuffix'; + final BasicMessageChannel pigeonVar_channel = + BasicMessageChannel( pigeonVar_channelName, pigeonChannelCodec, binaryMessenger: pigeonVar_binaryMessenger, @@ -969,20 +1005,29 @@ abstract class InAppPurchase2CallbackAPI { void onTransactionsUpdated(List newTransactions); - static void setUp(InAppPurchase2CallbackAPI? api, {BinaryMessenger? binaryMessenger, String messageChannelSuffix = '',}) { - messageChannelSuffix = messageChannelSuffix.isNotEmpty ? '.$messageChannelSuffix' : ''; + static void setUp( + InAppPurchase2CallbackAPI? api, { + BinaryMessenger? binaryMessenger, + String messageChannelSuffix = '', + }) { + messageChannelSuffix = + messageChannelSuffix.isNotEmpty ? '.$messageChannelSuffix' : ''; { - final BasicMessageChannel pigeonVar_channel = BasicMessageChannel( - 'dev.flutter.pigeon.in_app_purchase_storekit.InAppPurchase2CallbackAPI.onTransactionsUpdated$messageChannelSuffix', pigeonChannelCodec, + final BasicMessageChannel< + Object?> pigeonVar_channel = BasicMessageChannel< + Object?>( + 'dev.flutter.pigeon.in_app_purchase_storekit.InAppPurchase2CallbackAPI.onTransactionsUpdated$messageChannelSuffix', + pigeonChannelCodec, binaryMessenger: binaryMessenger); if (api == null) { pigeonVar_channel.setMessageHandler(null); } else { pigeonVar_channel.setMessageHandler((Object? message) async { assert(message != null, - 'Argument for dev.flutter.pigeon.in_app_purchase_storekit.InAppPurchase2CallbackAPI.onTransactionsUpdated was null.'); + 'Argument for dev.flutter.pigeon.in_app_purchase_storekit.InAppPurchase2CallbackAPI.onTransactionsUpdated was null.'); final List args = (message as List?)!; - final List? arg_newTransactions = (args[0] as List?)?.cast(); + final List? arg_newTransactions = + (args[0] as List?)?.cast(); assert(arg_newTransactions != null, 'Argument for dev.flutter.pigeon.in_app_purchase_storekit.InAppPurchase2CallbackAPI.onTransactionsUpdated was null, expected non-null List.'); try { @@ -990,8 +1035,9 @@ abstract class InAppPurchase2CallbackAPI { return wrapResponse(empty: true); } on PlatformException catch (e) { return wrapResponse(error: e); - } catch (e) { - return wrapResponse(error: PlatformException(code: 'error', message: e.toString())); + } catch (e) { + return wrapResponse( + error: PlatformException(code: 'error', message: e.toString())); } }); } diff --git a/packages/in_app_purchase/in_app_purchase_storekit/test/sk2_test_api.g.dart b/packages/in_app_purchase/in_app_purchase_storekit/test/sk2_test_api.g.dart index d62f39f3c35..57399529e55 100644 --- a/packages/in_app_purchase/in_app_purchase_storekit/test/sk2_test_api.g.dart +++ b/packages/in_app_purchase/in_app_purchase_storekit/test/sk2_test_api.g.dart @@ -13,7 +13,6 @@ import 'package:flutter_test/flutter_test.dart'; import 'package:in_app_purchase_storekit/src/sk2_pigeon.g.dart'; - class _PigeonCodec extends StandardMessageCodec { const _PigeonCodec(); @override @@ -21,43 +20,43 @@ class _PigeonCodec extends StandardMessageCodec { if (value is int) { buffer.putUint8(4); buffer.putInt64(value); - } else if (value is SK2ProductTypeMessage) { + } else if (value is SK2ProductTypeMessage) { buffer.putUint8(129); writeValue(buffer, value.index); - } else if (value is SK2SubscriptionOfferTypeMessage) { + } else if (value is SK2SubscriptionOfferTypeMessage) { buffer.putUint8(130); writeValue(buffer, value.index); - } else if (value is SK2SubscriptionOfferPaymentModeMessage) { + } else if (value is SK2SubscriptionOfferPaymentModeMessage) { buffer.putUint8(131); writeValue(buffer, value.index); - } else if (value is SK2SubscriptionPeriodUnitMessage) { + } else if (value is SK2SubscriptionPeriodUnitMessage) { buffer.putUint8(132); writeValue(buffer, value.index); - } else if (value is SK2ProductPurchaseResultMessage) { + } else if (value is SK2ProductPurchaseResultMessage) { buffer.putUint8(133); writeValue(buffer, value.index); - } else if (value is SK2SubscriptionOfferMessage) { + } else if (value is SK2SubscriptionOfferMessage) { buffer.putUint8(134); writeValue(buffer, value.encode()); - } else if (value is SK2SubscriptionPeriodMessage) { + } else if (value is SK2SubscriptionPeriodMessage) { buffer.putUint8(135); writeValue(buffer, value.encode()); - } else if (value is SK2SubscriptionInfoMessage) { + } else if (value is SK2SubscriptionInfoMessage) { buffer.putUint8(136); writeValue(buffer, value.encode()); - } else if (value is SK2ProductMessage) { + } else if (value is SK2ProductMessage) { buffer.putUint8(137); writeValue(buffer, value.encode()); - } else if (value is SK2PriceLocaleMessage) { + } else if (value is SK2PriceLocaleMessage) { buffer.putUint8(138); writeValue(buffer, value.encode()); - } else if (value is SK2ProductPurchaseOptionsMessage) { + } else if (value is SK2ProductPurchaseOptionsMessage) { buffer.putUint8(139); writeValue(buffer, value.encode()); - } else if (value is SK2TransactionMessage) { + } else if (value is SK2TransactionMessage) { buffer.putUint8(140); writeValue(buffer, value.encode()); - } else if (value is SK2ErrorMessage) { + } else if (value is SK2ErrorMessage) { buffer.putUint8(141); writeValue(buffer, value.encode()); } else { @@ -68,36 +67,44 @@ class _PigeonCodec extends StandardMessageCodec { @override Object? readValueOfType(int type, ReadBuffer buffer) { switch (type) { - case 129: + case 129: final int? value = readValue(buffer) as int?; return value == null ? null : SK2ProductTypeMessage.values[value]; - case 130: + case 130: final int? value = readValue(buffer) as int?; - return value == null ? null : SK2SubscriptionOfferTypeMessage.values[value]; - case 131: + return value == null + ? null + : SK2SubscriptionOfferTypeMessage.values[value]; + case 131: final int? value = readValue(buffer) as int?; - return value == null ? null : SK2SubscriptionOfferPaymentModeMessage.values[value]; - case 132: + return value == null + ? null + : SK2SubscriptionOfferPaymentModeMessage.values[value]; + case 132: final int? value = readValue(buffer) as int?; - return value == null ? null : SK2SubscriptionPeriodUnitMessage.values[value]; - case 133: + return value == null + ? null + : SK2SubscriptionPeriodUnitMessage.values[value]; + case 133: final int? value = readValue(buffer) as int?; - return value == null ? null : SK2ProductPurchaseResultMessage.values[value]; - case 134: + return value == null + ? null + : SK2ProductPurchaseResultMessage.values[value]; + case 134: return SK2SubscriptionOfferMessage.decode(readValue(buffer)!); - case 135: + case 135: return SK2SubscriptionPeriodMessage.decode(readValue(buffer)!); - case 136: + case 136: return SK2SubscriptionInfoMessage.decode(readValue(buffer)!); - case 137: + case 137: return SK2ProductMessage.decode(readValue(buffer)!); - case 138: + case 138: return SK2PriceLocaleMessage.decode(readValue(buffer)!); - case 139: + case 139: return SK2ProductPurchaseOptionsMessage.decode(readValue(buffer)!); - case 140: + case 140: return SK2TransactionMessage.decode(readValue(buffer)!); - case 141: + case 141: return SK2ErrorMessage.decode(readValue(buffer)!); default: return super.readValueOfType(type, buffer); @@ -106,14 +113,16 @@ class _PigeonCodec extends StandardMessageCodec { } abstract class TestInAppPurchase2Api { - static TestDefaultBinaryMessengerBinding? get _testBinaryMessengerBinding => TestDefaultBinaryMessengerBinding.instance; + static TestDefaultBinaryMessengerBinding? get _testBinaryMessengerBinding => + TestDefaultBinaryMessengerBinding.instance; static const MessageCodec pigeonChannelCodec = _PigeonCodec(); bool canMakePayments(); Future> products(List identifiers); - Future purchase(String id, {SK2ProductPurchaseOptionsMessage? options}); + Future purchase(String id, + {SK2ProductPurchaseOptionsMessage? options}); Future> transactions(); @@ -129,107 +138,150 @@ abstract class TestInAppPurchase2Api { Future sync(); - static void setUp(TestInAppPurchase2Api? api, {BinaryMessenger? binaryMessenger, String messageChannelSuffix = '',}) { - messageChannelSuffix = messageChannelSuffix.isNotEmpty ? '.$messageChannelSuffix' : ''; + static void setUp( + TestInAppPurchase2Api? api, { + BinaryMessenger? binaryMessenger, + String messageChannelSuffix = '', + }) { + messageChannelSuffix = + messageChannelSuffix.isNotEmpty ? '.$messageChannelSuffix' : ''; { - final BasicMessageChannel pigeonVar_channel = BasicMessageChannel( - 'dev.flutter.pigeon.in_app_purchase_storekit.InAppPurchase2API.canMakePayments$messageChannelSuffix', pigeonChannelCodec, + final BasicMessageChannel< + Object?> pigeonVar_channel = BasicMessageChannel< + Object?>( + 'dev.flutter.pigeon.in_app_purchase_storekit.InAppPurchase2API.canMakePayments$messageChannelSuffix', + pigeonChannelCodec, binaryMessenger: binaryMessenger); if (api == null) { - _testBinaryMessengerBinding!.defaultBinaryMessenger.setMockDecodedMessageHandler(pigeonVar_channel, null); + _testBinaryMessengerBinding!.defaultBinaryMessenger + .setMockDecodedMessageHandler(pigeonVar_channel, null); } else { - _testBinaryMessengerBinding!.defaultBinaryMessenger.setMockDecodedMessageHandler(pigeonVar_channel, (Object? message) async { + _testBinaryMessengerBinding!.defaultBinaryMessenger + .setMockDecodedMessageHandler(pigeonVar_channel, + (Object? message) async { try { final bool output = api.canMakePayments(); return [output]; } on PlatformException catch (e) { return wrapResponse(error: e); - } catch (e) { - return wrapResponse(error: PlatformException(code: 'error', message: e.toString())); + } catch (e) { + return wrapResponse( + error: PlatformException(code: 'error', message: e.toString())); } }); } } { - final BasicMessageChannel pigeonVar_channel = BasicMessageChannel( - 'dev.flutter.pigeon.in_app_purchase_storekit.InAppPurchase2API.products$messageChannelSuffix', pigeonChannelCodec, + final BasicMessageChannel< + Object?> pigeonVar_channel = BasicMessageChannel< + Object?>( + 'dev.flutter.pigeon.in_app_purchase_storekit.InAppPurchase2API.products$messageChannelSuffix', + pigeonChannelCodec, binaryMessenger: binaryMessenger); if (api == null) { - _testBinaryMessengerBinding!.defaultBinaryMessenger.setMockDecodedMessageHandler(pigeonVar_channel, null); + _testBinaryMessengerBinding!.defaultBinaryMessenger + .setMockDecodedMessageHandler(pigeonVar_channel, null); } else { - _testBinaryMessengerBinding!.defaultBinaryMessenger.setMockDecodedMessageHandler(pigeonVar_channel, (Object? message) async { + _testBinaryMessengerBinding!.defaultBinaryMessenger + .setMockDecodedMessageHandler(pigeonVar_channel, + (Object? message) async { assert(message != null, - 'Argument for dev.flutter.pigeon.in_app_purchase_storekit.InAppPurchase2API.products was null.'); + 'Argument for dev.flutter.pigeon.in_app_purchase_storekit.InAppPurchase2API.products was null.'); final List args = (message as List?)!; - final List? arg_identifiers = (args[0] as List?)?.cast(); + final List? arg_identifiers = + (args[0] as List?)?.cast(); assert(arg_identifiers != null, 'Argument for dev.flutter.pigeon.in_app_purchase_storekit.InAppPurchase2API.products was null, expected non-null List.'); try { - final List output = await api.products(arg_identifiers!); + final List output = + await api.products(arg_identifiers!); return [output]; } on PlatformException catch (e) { return wrapResponse(error: e); - } catch (e) { - return wrapResponse(error: PlatformException(code: 'error', message: e.toString())); + } catch (e) { + return wrapResponse( + error: PlatformException(code: 'error', message: e.toString())); } }); } } { - final BasicMessageChannel pigeonVar_channel = BasicMessageChannel( - 'dev.flutter.pigeon.in_app_purchase_storekit.InAppPurchase2API.purchase$messageChannelSuffix', pigeonChannelCodec, + final BasicMessageChannel< + Object?> pigeonVar_channel = BasicMessageChannel< + Object?>( + 'dev.flutter.pigeon.in_app_purchase_storekit.InAppPurchase2API.purchase$messageChannelSuffix', + pigeonChannelCodec, binaryMessenger: binaryMessenger); if (api == null) { - _testBinaryMessengerBinding!.defaultBinaryMessenger.setMockDecodedMessageHandler(pigeonVar_channel, null); + _testBinaryMessengerBinding!.defaultBinaryMessenger + .setMockDecodedMessageHandler(pigeonVar_channel, null); } else { - _testBinaryMessengerBinding!.defaultBinaryMessenger.setMockDecodedMessageHandler(pigeonVar_channel, (Object? message) async { + _testBinaryMessengerBinding!.defaultBinaryMessenger + .setMockDecodedMessageHandler(pigeonVar_channel, + (Object? message) async { assert(message != null, - 'Argument for dev.flutter.pigeon.in_app_purchase_storekit.InAppPurchase2API.purchase was null.'); + 'Argument for dev.flutter.pigeon.in_app_purchase_storekit.InAppPurchase2API.purchase was null.'); final List args = (message as List?)!; final String? arg_id = (args[0] as String?); assert(arg_id != null, 'Argument for dev.flutter.pigeon.in_app_purchase_storekit.InAppPurchase2API.purchase was null, expected non-null String.'); - final SK2ProductPurchaseOptionsMessage? arg_options = (args[1] as SK2ProductPurchaseOptionsMessage?); + final SK2ProductPurchaseOptionsMessage? arg_options = + (args[1] as SK2ProductPurchaseOptionsMessage?); try { - final SK2ProductPurchaseResultMessage output = await api.purchase(arg_id!, options: arg_options); + final SK2ProductPurchaseResultMessage output = + await api.purchase(arg_id!, options: arg_options); return [output]; } on PlatformException catch (e) { return wrapResponse(error: e); - } catch (e) { - return wrapResponse(error: PlatformException(code: 'error', message: e.toString())); + } catch (e) { + return wrapResponse( + error: PlatformException(code: 'error', message: e.toString())); } }); } } { - final BasicMessageChannel pigeonVar_channel = BasicMessageChannel( - 'dev.flutter.pigeon.in_app_purchase_storekit.InAppPurchase2API.transactions$messageChannelSuffix', pigeonChannelCodec, + final BasicMessageChannel< + Object?> pigeonVar_channel = BasicMessageChannel< + Object?>( + 'dev.flutter.pigeon.in_app_purchase_storekit.InAppPurchase2API.transactions$messageChannelSuffix', + pigeonChannelCodec, binaryMessenger: binaryMessenger); if (api == null) { - _testBinaryMessengerBinding!.defaultBinaryMessenger.setMockDecodedMessageHandler(pigeonVar_channel, null); + _testBinaryMessengerBinding!.defaultBinaryMessenger + .setMockDecodedMessageHandler(pigeonVar_channel, null); } else { - _testBinaryMessengerBinding!.defaultBinaryMessenger.setMockDecodedMessageHandler(pigeonVar_channel, (Object? message) async { + _testBinaryMessengerBinding!.defaultBinaryMessenger + .setMockDecodedMessageHandler(pigeonVar_channel, + (Object? message) async { try { final List output = await api.transactions(); return [output]; } on PlatformException catch (e) { return wrapResponse(error: e); - } catch (e) { - return wrapResponse(error: PlatformException(code: 'error', message: e.toString())); + } catch (e) { + return wrapResponse( + error: PlatformException(code: 'error', message: e.toString())); } }); } } { - final BasicMessageChannel pigeonVar_channel = BasicMessageChannel( - 'dev.flutter.pigeon.in_app_purchase_storekit.InAppPurchase2API.finish$messageChannelSuffix', pigeonChannelCodec, + final BasicMessageChannel< + Object?> pigeonVar_channel = BasicMessageChannel< + Object?>( + 'dev.flutter.pigeon.in_app_purchase_storekit.InAppPurchase2API.finish$messageChannelSuffix', + pigeonChannelCodec, binaryMessenger: binaryMessenger); if (api == null) { - _testBinaryMessengerBinding!.defaultBinaryMessenger.setMockDecodedMessageHandler(pigeonVar_channel, null); + _testBinaryMessengerBinding!.defaultBinaryMessenger + .setMockDecodedMessageHandler(pigeonVar_channel, null); } else { - _testBinaryMessengerBinding!.defaultBinaryMessenger.setMockDecodedMessageHandler(pigeonVar_channel, (Object? message) async { + _testBinaryMessengerBinding!.defaultBinaryMessenger + .setMockDecodedMessageHandler(pigeonVar_channel, + (Object? message) async { assert(message != null, - 'Argument for dev.flutter.pigeon.in_app_purchase_storekit.InAppPurchase2API.finish was null.'); + 'Argument for dev.flutter.pigeon.in_app_purchase_storekit.InAppPurchase2API.finish was null.'); final List args = (message as List?)!; final int? arg_id = (args[0] as int?); assert(arg_id != null, @@ -239,103 +291,139 @@ abstract class TestInAppPurchase2Api { return wrapResponse(empty: true); } on PlatformException catch (e) { return wrapResponse(error: e); - } catch (e) { - return wrapResponse(error: PlatformException(code: 'error', message: e.toString())); + } catch (e) { + return wrapResponse( + error: PlatformException(code: 'error', message: e.toString())); } }); } } { - final BasicMessageChannel pigeonVar_channel = BasicMessageChannel( - 'dev.flutter.pigeon.in_app_purchase_storekit.InAppPurchase2API.startListeningToTransactions$messageChannelSuffix', pigeonChannelCodec, + final BasicMessageChannel< + Object?> pigeonVar_channel = BasicMessageChannel< + Object?>( + 'dev.flutter.pigeon.in_app_purchase_storekit.InAppPurchase2API.startListeningToTransactions$messageChannelSuffix', + pigeonChannelCodec, binaryMessenger: binaryMessenger); if (api == null) { - _testBinaryMessengerBinding!.defaultBinaryMessenger.setMockDecodedMessageHandler(pigeonVar_channel, null); + _testBinaryMessengerBinding!.defaultBinaryMessenger + .setMockDecodedMessageHandler(pigeonVar_channel, null); } else { - _testBinaryMessengerBinding!.defaultBinaryMessenger.setMockDecodedMessageHandler(pigeonVar_channel, (Object? message) async { + _testBinaryMessengerBinding!.defaultBinaryMessenger + .setMockDecodedMessageHandler(pigeonVar_channel, + (Object? message) async { try { api.startListeningToTransactions(); return wrapResponse(empty: true); } on PlatformException catch (e) { return wrapResponse(error: e); - } catch (e) { - return wrapResponse(error: PlatformException(code: 'error', message: e.toString())); + } catch (e) { + return wrapResponse( + error: PlatformException(code: 'error', message: e.toString())); } }); } } { - final BasicMessageChannel pigeonVar_channel = BasicMessageChannel( - 'dev.flutter.pigeon.in_app_purchase_storekit.InAppPurchase2API.stopListeningToTransactions$messageChannelSuffix', pigeonChannelCodec, + final BasicMessageChannel< + Object?> pigeonVar_channel = BasicMessageChannel< + Object?>( + 'dev.flutter.pigeon.in_app_purchase_storekit.InAppPurchase2API.stopListeningToTransactions$messageChannelSuffix', + pigeonChannelCodec, binaryMessenger: binaryMessenger); if (api == null) { - _testBinaryMessengerBinding!.defaultBinaryMessenger.setMockDecodedMessageHandler(pigeonVar_channel, null); + _testBinaryMessengerBinding!.defaultBinaryMessenger + .setMockDecodedMessageHandler(pigeonVar_channel, null); } else { - _testBinaryMessengerBinding!.defaultBinaryMessenger.setMockDecodedMessageHandler(pigeonVar_channel, (Object? message) async { + _testBinaryMessengerBinding!.defaultBinaryMessenger + .setMockDecodedMessageHandler(pigeonVar_channel, + (Object? message) async { try { api.stopListeningToTransactions(); return wrapResponse(empty: true); } on PlatformException catch (e) { return wrapResponse(error: e); - } catch (e) { - return wrapResponse(error: PlatformException(code: 'error', message: e.toString())); + } catch (e) { + return wrapResponse( + error: PlatformException(code: 'error', message: e.toString())); } }); } } { - final BasicMessageChannel pigeonVar_channel = BasicMessageChannel( - 'dev.flutter.pigeon.in_app_purchase_storekit.InAppPurchase2API.restorePurchases$messageChannelSuffix', pigeonChannelCodec, + final BasicMessageChannel< + Object?> pigeonVar_channel = BasicMessageChannel< + Object?>( + 'dev.flutter.pigeon.in_app_purchase_storekit.InAppPurchase2API.restorePurchases$messageChannelSuffix', + pigeonChannelCodec, binaryMessenger: binaryMessenger); if (api == null) { - _testBinaryMessengerBinding!.defaultBinaryMessenger.setMockDecodedMessageHandler(pigeonVar_channel, null); + _testBinaryMessengerBinding!.defaultBinaryMessenger + .setMockDecodedMessageHandler(pigeonVar_channel, null); } else { - _testBinaryMessengerBinding!.defaultBinaryMessenger.setMockDecodedMessageHandler(pigeonVar_channel, (Object? message) async { + _testBinaryMessengerBinding!.defaultBinaryMessenger + .setMockDecodedMessageHandler(pigeonVar_channel, + (Object? message) async { try { await api.restorePurchases(); return wrapResponse(empty: true); } on PlatformException catch (e) { return wrapResponse(error: e); - } catch (e) { - return wrapResponse(error: PlatformException(code: 'error', message: e.toString())); + } catch (e) { + return wrapResponse( + error: PlatformException(code: 'error', message: e.toString())); } }); } } { - final BasicMessageChannel pigeonVar_channel = BasicMessageChannel( - 'dev.flutter.pigeon.in_app_purchase_storekit.InAppPurchase2API.countryCode$messageChannelSuffix', pigeonChannelCodec, + final BasicMessageChannel< + Object?> pigeonVar_channel = BasicMessageChannel< + Object?>( + 'dev.flutter.pigeon.in_app_purchase_storekit.InAppPurchase2API.countryCode$messageChannelSuffix', + pigeonChannelCodec, binaryMessenger: binaryMessenger); if (api == null) { - _testBinaryMessengerBinding!.defaultBinaryMessenger.setMockDecodedMessageHandler(pigeonVar_channel, null); + _testBinaryMessengerBinding!.defaultBinaryMessenger + .setMockDecodedMessageHandler(pigeonVar_channel, null); } else { - _testBinaryMessengerBinding!.defaultBinaryMessenger.setMockDecodedMessageHandler(pigeonVar_channel, (Object? message) async { + _testBinaryMessengerBinding!.defaultBinaryMessenger + .setMockDecodedMessageHandler(pigeonVar_channel, + (Object? message) async { try { final String output = await api.countryCode(); return [output]; } on PlatformException catch (e) { return wrapResponse(error: e); - } catch (e) { - return wrapResponse(error: PlatformException(code: 'error', message: e.toString())); + } catch (e) { + return wrapResponse( + error: PlatformException(code: 'error', message: e.toString())); } }); } } { - final BasicMessageChannel pigeonVar_channel = BasicMessageChannel( - 'dev.flutter.pigeon.in_app_purchase_storekit.InAppPurchase2API.sync$messageChannelSuffix', pigeonChannelCodec, + final BasicMessageChannel< + Object?> pigeonVar_channel = BasicMessageChannel< + Object?>( + 'dev.flutter.pigeon.in_app_purchase_storekit.InAppPurchase2API.sync$messageChannelSuffix', + pigeonChannelCodec, binaryMessenger: binaryMessenger); if (api == null) { - _testBinaryMessengerBinding!.defaultBinaryMessenger.setMockDecodedMessageHandler(pigeonVar_channel, null); + _testBinaryMessengerBinding!.defaultBinaryMessenger + .setMockDecodedMessageHandler(pigeonVar_channel, null); } else { - _testBinaryMessengerBinding!.defaultBinaryMessenger.setMockDecodedMessageHandler(pigeonVar_channel, (Object? message) async { + _testBinaryMessengerBinding!.defaultBinaryMessenger + .setMockDecodedMessageHandler(pigeonVar_channel, + (Object? message) async { try { await api.sync(); return wrapResponse(empty: true); } on PlatformException catch (e) { return wrapResponse(error: e); - } catch (e) { - return wrapResponse(error: PlatformException(code: 'error', message: e.toString())); + } catch (e) { + return wrapResponse( + error: PlatformException(code: 'error', message: e.toString())); } }); } From 5b225f986e9cd3abd52b1b194c680fa91f56149f Mon Sep 17 00:00:00 2001 From: louisehsu Date: Mon, 31 Mar 2025 15:27:27 -0700 Subject: [PATCH 07/13] pod spec --- .../StoreKit2/InAppPurchasePlugin+StoreKit2.swift | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/packages/in_app_purchase/in_app_purchase_storekit/darwin/in_app_purchase_storekit/Sources/in_app_purchase_storekit/StoreKit2/InAppPurchasePlugin+StoreKit2.swift b/packages/in_app_purchase/in_app_purchase_storekit/darwin/in_app_purchase_storekit/Sources/in_app_purchase_storekit/StoreKit2/InAppPurchasePlugin+StoreKit2.swift index 9cae8290f16..e92d4dfa627 100644 --- a/packages/in_app_purchase/in_app_purchase_storekit/darwin/in_app_purchase_storekit/Sources/in_app_purchase_storekit/StoreKit2/InAppPurchasePlugin+StoreKit2.swift +++ b/packages/in_app_purchase/in_app_purchase_storekit/darwin/in_app_purchase_storekit/Sources/in_app_purchase_storekit/StoreKit2/InAppPurchasePlugin+StoreKit2.swift @@ -149,10 +149,10 @@ extension InAppPurchasePlugin: InAppPurchase2API { /// https://developer.apple.com/documentation/storekit/storefront/countrycode func countryCode(completion: @escaping (Result) -> Void) { Task { - guard let currentStorefront = try await Storefront.current else { + guard let currentStorefront = await Storefront.current else { completion(.failure(fatalError("Could not get current Storefront."))) } - return completion(.success(try await currentStorefront.countryCode)) + return completion(.success(currentStorefront.countryCode)) } } From 272fecf13dbe02a7763f5a02d2b9c3c27bc33a86 Mon Sep 17 00:00:00 2001 From: louisehsu Date: Tue, 1 Apr 2025 13:53:17 -0700 Subject: [PATCH 08/13] . --- .../StoreKit2/InAppPurchasePlugin+StoreKit2.swift | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/packages/in_app_purchase/in_app_purchase_storekit/darwin/in_app_purchase_storekit/Sources/in_app_purchase_storekit/StoreKit2/InAppPurchasePlugin+StoreKit2.swift b/packages/in_app_purchase/in_app_purchase_storekit/darwin/in_app_purchase_storekit/Sources/in_app_purchase_storekit/StoreKit2/InAppPurchasePlugin+StoreKit2.swift index e92d4dfa627..68738ee06e1 100644 --- a/packages/in_app_purchase/in_app_purchase_storekit/darwin/in_app_purchase_storekit/Sources/in_app_purchase_storekit/StoreKit2/InAppPurchasePlugin+StoreKit2.swift +++ b/packages/in_app_purchase/in_app_purchase_storekit/darwin/in_app_purchase_storekit/Sources/in_app_purchase_storekit/StoreKit2/InAppPurchasePlugin+StoreKit2.swift @@ -150,7 +150,7 @@ extension InAppPurchasePlugin: InAppPurchase2API { func countryCode(completion: @escaping (Result) -> Void) { Task { guard let currentStorefront = await Storefront.current else { - completion(.failure(fatalError("Could not get current Storefront."))) + return completion(.failure(fatalError("Could not get current Storefront."))) } return completion(.success(currentStorefront.countryCode)) } From 775132545ca288ea00baf75a7a97779cb8af37aa Mon Sep 17 00:00:00 2001 From: louisehsu Date: Tue, 1 Apr 2025 14:29:10 -0700 Subject: [PATCH 09/13] . --- .../StoreKit2/InAppPurchasePlugin+StoreKit2.swift | 6 +++++- .../StoreKit2/sk2_pigeon.g.swift | 10 ++++++++-- 2 files changed, 13 insertions(+), 3 deletions(-) diff --git a/packages/in_app_purchase/in_app_purchase_storekit/darwin/in_app_purchase_storekit/Sources/in_app_purchase_storekit/StoreKit2/InAppPurchasePlugin+StoreKit2.swift b/packages/in_app_purchase/in_app_purchase_storekit/darwin/in_app_purchase_storekit/Sources/in_app_purchase_storekit/StoreKit2/InAppPurchasePlugin+StoreKit2.swift index 68738ee06e1..78801129130 100644 --- a/packages/in_app_purchase/in_app_purchase_storekit/darwin/in_app_purchase_storekit/Sources/in_app_purchase_storekit/StoreKit2/InAppPurchasePlugin+StoreKit2.swift +++ b/packages/in_app_purchase/in_app_purchase_storekit/darwin/in_app_purchase_storekit/Sources/in_app_purchase_storekit/StoreKit2/InAppPurchasePlugin+StoreKit2.swift @@ -150,7 +150,11 @@ extension InAppPurchasePlugin: InAppPurchase2API { func countryCode(completion: @escaping (Result) -> Void) { Task { guard let currentStorefront = await Storefront.current else { - return completion(.failure(fatalError("Could not get current Storefront."))) + let error = PigeonError( + code: "storekit2_failed_to_fetch_country_code", + message: "Storekit has failed to fetch the country code.", + details: "Storekit has failed to fetch the country code.") + return completion(.failure(error)) } return completion(.success(currentStorefront.countryCode)) } diff --git a/packages/in_app_purchase/in_app_purchase_storekit/darwin/in_app_purchase_storekit/Sources/in_app_purchase_storekit/StoreKit2/sk2_pigeon.g.swift b/packages/in_app_purchase/in_app_purchase_storekit/darwin/in_app_purchase_storekit/Sources/in_app_purchase_storekit/StoreKit2/sk2_pigeon.g.swift index be43725d954..e53c62bba06 100644 --- a/packages/in_app_purchase/in_app_purchase_storekit/darwin/in_app_purchase_storekit/Sources/in_app_purchase_storekit/StoreKit2/sk2_pigeon.g.swift +++ b/packages/in_app_purchase/in_app_purchase_storekit/darwin/in_app_purchase_storekit/Sources/in_app_purchase_storekit/StoreKit2/sk2_pigeon.g.swift @@ -529,9 +529,15 @@ protocol InAppPurchase2API { class InAppPurchase2APISetup { static var codec: FlutterStandardMessageCodec { Sk2PigeonPigeonCodec.shared } /// Sets up an instance of `InAppPurchase2API` to handle messages through the `binaryMessenger`. - static func setUp(binaryMessenger: FlutterBinaryMessenger, api: InAppPurchase2API?, messageChannelSuffix: String = "") { + static func setUp( + binaryMessenger: FlutterBinaryMessenger, api: InAppPurchase2API?, + messageChannelSuffix: String = "" + ) { let channelSuffix = messageChannelSuffix.count > 0 ? ".\(messageChannelSuffix)" : "" - let canMakePaymentsChannel = FlutterBasicMessageChannel(name: "dev.flutter.pigeon.in_app_purchase_storekit.InAppPurchase2API.canMakePayments\(channelSuffix)", binaryMessenger: binaryMessenger, codec: codec) + let canMakePaymentsChannel = FlutterBasicMessageChannel( + name: + "dev.flutter.pigeon.in_app_purchase_storekit.InAppPurchase2API.canMakePayments\(channelSuffix)", + binaryMessenger: binaryMessenger, codec: codec) if let api = api { canMakePaymentsChannel.setMessageHandler { _, reply in do { From cde9e8c6e1d20f90fb7f83c5d9f6e151f1406261 Mon Sep 17 00:00:00 2001 From: louisehsu Date: Thu, 10 Apr 2025 13:40:04 +0200 Subject: [PATCH 10/13] comments! --- .../StoreKit2/InAppPurchasePlugin+StoreKit2.swift | 13 ++++++++++--- .../in_app_purchase_storekit/example/lib/main.dart | 2 +- 2 files changed, 11 insertions(+), 4 deletions(-) diff --git a/packages/in_app_purchase/in_app_purchase_storekit/darwin/in_app_purchase_storekit/Sources/in_app_purchase_storekit/StoreKit2/InAppPurchasePlugin+StoreKit2.swift b/packages/in_app_purchase/in_app_purchase_storekit/darwin/in_app_purchase_storekit/Sources/in_app_purchase_storekit/StoreKit2/InAppPurchasePlugin+StoreKit2.swift index 78801129130..69c7ceae5a9 100644 --- a/packages/in_app_purchase/in_app_purchase_storekit/darwin/in_app_purchase_storekit/Sources/in_app_purchase_storekit/StoreKit2/InAppPurchasePlugin+StoreKit2.swift +++ b/packages/in_app_purchase/in_app_purchase_storekit/darwin/in_app_purchase_storekit/Sources/in_app_purchase_storekit/StoreKit2/InAppPurchasePlugin+StoreKit2.swift @@ -153,19 +153,26 @@ extension InAppPurchasePlugin: InAppPurchase2API { let error = PigeonError( code: "storekit2_failed_to_fetch_country_code", message: "Storekit has failed to fetch the country code.", - details: "Storekit has failed to fetch the country code.") + details: "Storefront.current returned nil.") return completion(.failure(error)) } - return completion(.success(currentStorefront.countryCode)) + completion(.success(currentStorefront.countryCode)) } } + /// Wrapper method around StoreKit2's sync() method + /// https://developer.apple.com/documentation/storekit/appstore/sync() + /// When called, a system prompt will ask users to enter their authentication details func sync(completion: @escaping (Result) -> Void) { Task { do { try await AppStore.sync() } catch { - fatalError("Failed to sync to the AppStore: \(error)") + let pigeonError = PigeonError( + code: "storekit2_failed_to_sync_to_app_store", + message: "Storekit has failed to sync to the app store.", + details: "\(error)") + completion(.failure(pigeonError)) } } } diff --git a/packages/in_app_purchase/in_app_purchase_storekit/example/lib/main.dart b/packages/in_app_purchase/in_app_purchase_storekit/example/lib/main.dart index 27c58a7ce8a..a6beb31f909 100644 --- a/packages/in_app_purchase/in_app_purchase_storekit/example/lib/main.dart +++ b/packages/in_app_purchase/in_app_purchase_storekit/example/lib/main.dart @@ -337,7 +337,7 @@ class _MyAppState extends State<_MyApp> { backgroundColor: Theme.of(context).colorScheme.primary, foregroundColor: Colors.white, ), - onPressed: () => _iapStoreKitPlatformAddition.sync(), + onPressed: () => _iapStoreKitPlatform.restorePurchases(), child: const Text('Restore purchases'), ), ], From b1c712c8e4d7c273caa360cd9b23719376138e1c Mon Sep 17 00:00:00 2001 From: louisehsu Date: Tue, 15 Apr 2025 15:27:57 -0700 Subject: [PATCH 11/13] commentssssss --- .../StoreKit2/InAppPurchasePlugin+StoreKit2.swift | 2 ++ 1 file changed, 2 insertions(+) diff --git a/packages/in_app_purchase/in_app_purchase_storekit/darwin/in_app_purchase_storekit/Sources/in_app_purchase_storekit/StoreKit2/InAppPurchasePlugin+StoreKit2.swift b/packages/in_app_purchase/in_app_purchase_storekit/darwin/in_app_purchase_storekit/Sources/in_app_purchase_storekit/StoreKit2/InAppPurchasePlugin+StoreKit2.swift index 69c7ceae5a9..26729c7f28a 100644 --- a/packages/in_app_purchase/in_app_purchase_storekit/darwin/in_app_purchase_storekit/Sources/in_app_purchase_storekit/StoreKit2/InAppPurchasePlugin+StoreKit2.swift +++ b/packages/in_app_purchase/in_app_purchase_storekit/darwin/in_app_purchase_storekit/Sources/in_app_purchase_storekit/StoreKit2/InAppPurchasePlugin+StoreKit2.swift @@ -157,6 +157,7 @@ extension InAppPurchasePlugin: InAppPurchase2API { return completion(.failure(error)) } completion(.success(currentStorefront.countryCode)) + return } } @@ -167,6 +168,7 @@ extension InAppPurchasePlugin: InAppPurchase2API { Task { do { try await AppStore.sync() + completion(.success(Void())) } catch { let pigeonError = PigeonError( code: "storekit2_failed_to_sync_to_app_store", From 407752b976a3f4fc5426a5ec2436d0d69842c5b3 Mon Sep 17 00:00:00 2001 From: louisehsu Date: Thu, 17 Apr 2025 11:08:12 -0700 Subject: [PATCH 12/13] commentssss --- .../StoreKit2/InAppPurchasePlugin+StoreKit2.swift | 5 ++++- 1 file changed, 4 insertions(+), 1 deletion(-) diff --git a/packages/in_app_purchase/in_app_purchase_storekit/darwin/in_app_purchase_storekit/Sources/in_app_purchase_storekit/StoreKit2/InAppPurchasePlugin+StoreKit2.swift b/packages/in_app_purchase/in_app_purchase_storekit/darwin/in_app_purchase_storekit/Sources/in_app_purchase_storekit/StoreKit2/InAppPurchasePlugin+StoreKit2.swift index 26729c7f28a..97f1aae7236 100644 --- a/packages/in_app_purchase/in_app_purchase_storekit/darwin/in_app_purchase_storekit/Sources/in_app_purchase_storekit/StoreKit2/InAppPurchasePlugin+StoreKit2.swift +++ b/packages/in_app_purchase/in_app_purchase_storekit/darwin/in_app_purchase_storekit/Sources/in_app_purchase_storekit/StoreKit2/InAppPurchasePlugin+StoreKit2.swift @@ -154,7 +154,8 @@ extension InAppPurchasePlugin: InAppPurchase2API { code: "storekit2_failed_to_fetch_country_code", message: "Storekit has failed to fetch the country code.", details: "Storefront.current returned nil.") - return completion(.failure(error)) + completion(.failure(error)) + return } completion(.success(currentStorefront.countryCode)) return @@ -169,12 +170,14 @@ extension InAppPurchasePlugin: InAppPurchase2API { do { try await AppStore.sync() completion(.success(Void())) + return } catch { let pigeonError = PigeonError( code: "storekit2_failed_to_sync_to_app_store", message: "Storekit has failed to sync to the app store.", details: "\(error)") completion(.failure(pigeonError)) + return } } } From 1cbbc14b0c2d358f440cd59777a117ea3d0ece10 Mon Sep 17 00:00:00 2001 From: louisehsu Date: Thu, 17 Apr 2025 15:09:57 -0700 Subject: [PATCH 13/13] . --- .../StoreKit2/InAppPurchasePlugin+StoreKit2.swift | 2 +- .../lib/src/store_kit_2_wrappers/sk2_storefront_wrapper.dart | 3 +-- 2 files changed, 2 insertions(+), 3 deletions(-) diff --git a/packages/in_app_purchase/in_app_purchase_storekit/darwin/in_app_purchase_storekit/Sources/in_app_purchase_storekit/StoreKit2/InAppPurchasePlugin+StoreKit2.swift b/packages/in_app_purchase/in_app_purchase_storekit/darwin/in_app_purchase_storekit/Sources/in_app_purchase_storekit/StoreKit2/InAppPurchasePlugin+StoreKit2.swift index 97f1aae7236..4422ebc0f35 100644 --- a/packages/in_app_purchase/in_app_purchase_storekit/darwin/in_app_purchase_storekit/Sources/in_app_purchase_storekit/StoreKit2/InAppPurchasePlugin+StoreKit2.swift +++ b/packages/in_app_purchase/in_app_purchase_storekit/darwin/in_app_purchase_storekit/Sources/in_app_purchase_storekit/StoreKit2/InAppPurchasePlugin+StoreKit2.swift @@ -169,7 +169,7 @@ extension InAppPurchasePlugin: InAppPurchase2API { Task { do { try await AppStore.sync() - completion(.success(Void())) + completion(.success(())) return } catch { let pigeonError = PigeonError( diff --git a/packages/in_app_purchase/in_app_purchase_storekit/lib/src/store_kit_2_wrappers/sk2_storefront_wrapper.dart b/packages/in_app_purchase/in_app_purchase_storekit/lib/src/store_kit_2_wrappers/sk2_storefront_wrapper.dart index 5f0779673e1..4d7ebcfa9bd 100644 --- a/packages/in_app_purchase/in_app_purchase_storekit/lib/src/store_kit_2_wrappers/sk2_storefront_wrapper.dart +++ b/packages/in_app_purchase/in_app_purchase_storekit/lib/src/store_kit_2_wrappers/sk2_storefront_wrapper.dart @@ -13,7 +13,6 @@ final class Storefront { /// Returns the 3 letter code for a store's locale /// (https://developer.apple.com/documentation/storekit/storefront/countrycode) Future countryCode() async { - final String code = await _hostApi.countryCode(); - return code; + return _hostApi.countryCode(); } }