From a3676bebb333095e5ebd9fdef9aad4b08fcb5537 Mon Sep 17 00:00:00 2001 From: FMorschel <52160996+FMorschel@users.noreply.github.com> Date: Fri, 5 Sep 2025 15:11:05 -0300 Subject: [PATCH 1/4] removes redundant arguments from annotations --- .../test_inputs/shell_route_data.dart | 12 +++--------- ...shell_route_data_without_unnamed_constructor.dart | 4 +--- .../src/store_kit_wrappers/sk_product_wrapper.dart | 2 +- 3 files changed, 5 insertions(+), 13 deletions(-) diff --git a/packages/go_router_builder/test_inputs/shell_route_data.dart b/packages/go_router_builder/test_inputs/shell_route_data.dart index b4839d98726..2b6f5bbbf58 100644 --- a/packages/go_router_builder/test_inputs/shell_route_data.dart +++ b/packages/go_router_builder/test_inputs/shell_route_data.dart @@ -4,21 +4,15 @@ import 'package:go_router/go_router.dart'; -@TypedShellRoute( - routes: >[], -) +@TypedShellRoute() class ShellRouteNoConstConstructor extends ShellRouteData {} -@TypedShellRoute( - routes: >[], -) +@TypedShellRoute() class ShellRouteWithConstConstructor extends ShellRouteData { const ShellRouteWithConstConstructor(); } -@TypedShellRoute( - routes: >[], -) +@TypedShellRoute() class ShellRouteWithRestorationScopeId extends ShellRouteData { const ShellRouteWithRestorationScopeId(); diff --git a/packages/go_router_builder/test_inputs/shell_route_data_without_unnamed_constructor.dart b/packages/go_router_builder/test_inputs/shell_route_data_without_unnamed_constructor.dart index 24e97bfd9c2..23ea2a48099 100644 --- a/packages/go_router_builder/test_inputs/shell_route_data_without_unnamed_constructor.dart +++ b/packages/go_router_builder/test_inputs/shell_route_data_without_unnamed_constructor.dart @@ -4,9 +4,7 @@ import 'package:go_router/go_router.dart'; -@TypedShellRoute( - routes: >[], -) +@TypedShellRoute() class ShellRouteWithoutUnnamedConstructor extends ShellRouteData { const ShellRouteWithoutUnnamedConstructor.namedConstructor(); } diff --git a/packages/in_app_purchase/in_app_purchase_storekit/lib/src/store_kit_wrappers/sk_product_wrapper.dart b/packages/in_app_purchase/in_app_purchase_storekit/lib/src/store_kit_wrappers/sk_product_wrapper.dart index 2b6f8ec3d77..424bb9f2415 100644 --- a/packages/in_app_purchase/in_app_purchase_storekit/lib/src/store_kit_wrappers/sk_product_wrapper.dart +++ b/packages/in_app_purchase/in_app_purchase_storekit/lib/src/store_kit_wrappers/sk_product_wrapper.dart @@ -384,7 +384,7 @@ class SKProductDiscountWrapper { /// A string used to uniquely identify a discount offer for a product. /// /// You set up offers and their identifiers in App Store Connect. - @JsonKey(defaultValue: null) + @JsonKey() final String? identifier; /// Values representing the types of discount offers an app can present. From c2287042dc678ede928a9ea03d6633abce095254 Mon Sep 17 00:00:00 2001 From: FMorschel <52160996+FMorschel@users.noreply.github.com> Date: Mon, 8 Sep 2025 12:05:39 -0300 Subject: [PATCH 2/4] generated file changes --- .../store_kit_wrappers/enum_converters.g.dart | 5 -- .../sk_payment_queue_wrapper.g.dart | 51 ------------------- .../sk_payment_transaction_wrappers.g.dart | 2 +- .../sk_product_wrapper.g.dart | 12 ++--- 4 files changed, 7 insertions(+), 63 deletions(-) delete mode 100644 packages/in_app_purchase/in_app_purchase_storekit/lib/src/store_kit_wrappers/sk_payment_queue_wrapper.g.dart diff --git a/packages/in_app_purchase/in_app_purchase_storekit/lib/src/store_kit_wrappers/enum_converters.g.dart b/packages/in_app_purchase/in_app_purchase_storekit/lib/src/store_kit_wrappers/enum_converters.g.dart index a4c3d600984..d0c2dd267e6 100644 --- a/packages/in_app_purchase/in_app_purchase_storekit/lib/src/store_kit_wrappers/enum_converters.g.dart +++ b/packages/in_app_purchase/in_app_purchase_storekit/lib/src/store_kit_wrappers/enum_converters.g.dart @@ -39,8 +39,3 @@ const _$SKProductDiscountPaymentModeEnumMap = { SKProductDiscountPaymentMode.freeTrail: 2, SKProductDiscountPaymentMode.unspecified: -1, }; - -const _$SKProductDiscountTypeEnumMap = { - SKProductDiscountType.introductory: 0, - SKProductDiscountType.subscription: 1, -}; diff --git a/packages/in_app_purchase/in_app_purchase_storekit/lib/src/store_kit_wrappers/sk_payment_queue_wrapper.g.dart b/packages/in_app_purchase/in_app_purchase_storekit/lib/src/store_kit_wrappers/sk_payment_queue_wrapper.g.dart deleted file mode 100644 index 7dbd5b82cfb..00000000000 --- a/packages/in_app_purchase/in_app_purchase_storekit/lib/src/store_kit_wrappers/sk_payment_queue_wrapper.g.dart +++ /dev/null @@ -1,51 +0,0 @@ -// GENERATED CODE - DO NOT MODIFY BY HAND - -part of 'sk_payment_queue_wrapper.dart'; - -// ************************************************************************** -// JsonSerializableGenerator -// ************************************************************************** - -SKError _$SKErrorFromJson(Map json) => SKError( - code: json['code'] as int? ?? 0, - domain: json['domain'] as String? ?? '', - userInfo: - (json['userInfo'] as Map?)?.map((k, e) => MapEntry(k as String, e)) ?? {}, -); - -SKPaymentWrapper _$SKPaymentWrapperFromJson(Map json) => SKPaymentWrapper( - productIdentifier: json['productIdentifier'] as String? ?? '', - applicationUsername: json['applicationUsername'] as String?, - requestData: json['requestData'] as String?, - quantity: json['quantity'] as int? ?? 0, - simulatesAskToBuyInSandbox: - json['simulatesAskToBuyInSandbox'] as bool? ?? false, -); - -Map _$SKPaymentWrapperToJson(SKPaymentWrapper instance) => - { - 'productIdentifier': instance.productIdentifier, - 'applicationUsername': instance.applicationUsername, - 'requestData': instance.requestData, - 'quantity': instance.quantity, - 'simulatesAskToBuyInSandbox': instance.simulatesAskToBuyInSandbox, - }; - -SKPaymentDiscountWrapper _$SKPaymentDiscountWrapperFromJson(Map json) => - SKPaymentDiscountWrapper( - identifier: json['identifier'] as String, - keyIdentifier: json['keyIdentifier'] as String, - nonce: json['nonce'] as String, - signature: json['signature'] as String, - timestamp: json['timestamp'] as int, - ); - -Map _$SKPaymentDiscountWrapperToJson( - SKPaymentDiscountWrapper instance, -) => { - 'identifier': instance.identifier, - 'keyIdentifier': instance.keyIdentifier, - 'nonce': instance.nonce, - 'signature': instance.signature, - 'timestamp': instance.timestamp, -}; diff --git a/packages/in_app_purchase/in_app_purchase_storekit/lib/src/store_kit_wrappers/sk_payment_transaction_wrappers.g.dart b/packages/in_app_purchase/in_app_purchase_storekit/lib/src/store_kit_wrappers/sk_payment_transaction_wrappers.g.dart index 48d8e5b57db..6aaf9568578 100644 --- a/packages/in_app_purchase/in_app_purchase_storekit/lib/src/store_kit_wrappers/sk_payment_transaction_wrappers.g.dart +++ b/packages/in_app_purchase/in_app_purchase_storekit/lib/src/store_kit_wrappers/sk_payment_transaction_wrappers.g.dart @@ -12,7 +12,7 @@ SKPaymentTransactionWrapper _$SKPaymentTransactionWrapperFromJson(Map json) => Map.from(json['payment'] as Map), ), transactionState: const SKTransactionStatusConverter().fromJson( - json['transactionState'] as int?, + (json['transactionState'] as num?)?.toInt(), ), originalTransaction: json['originalTransaction'] == null ? null diff --git a/packages/in_app_purchase/in_app_purchase_storekit/lib/src/store_kit_wrappers/sk_product_wrapper.g.dart b/packages/in_app_purchase/in_app_purchase_storekit/lib/src/store_kit_wrappers/sk_product_wrapper.g.dart index 0423d5ee872..acbfb2d861f 100644 --- a/packages/in_app_purchase/in_app_purchase_storekit/lib/src/store_kit_wrappers/sk_product_wrapper.g.dart +++ b/packages/in_app_purchase/in_app_purchase_storekit/lib/src/store_kit_wrappers/sk_product_wrapper.g.dart @@ -27,9 +27,9 @@ SkProductResponseWrapper _$SkProductResponseWrapperFromJson(Map json) => SKProductSubscriptionPeriodWrapper _$SKProductSubscriptionPeriodWrapperFromJson( Map json, ) => SKProductSubscriptionPeriodWrapper( - numberOfUnits: json['numberOfUnits'] as int? ?? 0, + numberOfUnits: (json['numberOfUnits'] as num?)?.toInt() ?? 0, unit: const SKSubscriptionPeriodUnitConverter().fromJson( - json['unit'] as int?, + (json['unit'] as num?)?.toInt(), ), ); @@ -39,18 +39,18 @@ SKProductDiscountWrapper _$SKProductDiscountWrapperFromJson(Map json) => priceLocale: SKPriceLocaleWrapper.fromJson( (json['priceLocale'] as Map?)?.map((k, e) => MapEntry(k as String, e)), ), - numberOfPeriods: json['numberOfPeriods'] as int? ?? 0, + numberOfPeriods: (json['numberOfPeriods'] as num?)?.toInt() ?? 0, paymentMode: const SKProductDiscountPaymentModeConverter().fromJson( - json['paymentMode'] as int?, + (json['paymentMode'] as num?)?.toInt(), ), subscriptionPeriod: SKProductSubscriptionPeriodWrapper.fromJson( (json['subscriptionPeriod'] as Map?)?.map( (k, e) => MapEntry(k as String, e), ), ), - identifier: json['identifier'] as String? ?? null, + identifier: json['identifier'] as String?, type: const SKProductDiscountTypeConverter().fromJson( - json['type'] as int?, + (json['type'] as num?)?.toInt(), ), ); From bccd492194360d17ea18aa2877e0618b3312840f Mon Sep 17 00:00:00 2001 From: FMorschel <52160996+FMorschel@users.noreply.github.com> Date: Mon, 8 Sep 2025 16:28:19 -0300 Subject: [PATCH 3/4] regenerate files --- .../store_kit_wrappers/enum_converters.dart | 1 + .../store_kit_wrappers/enum_converters.g.dart | 9 +++ .../sk_payment_queue_wrapper.dart | 2 +- .../sk_payment_queue_wrapper.g.dart | 57 +++++++++++++++++++ .../in_app_purchase_storekit/pubspec.yaml | 2 +- 5 files changed, 69 insertions(+), 2 deletions(-) create mode 100644 packages/in_app_purchase/in_app_purchase_storekit/lib/src/store_kit_wrappers/sk_payment_queue_wrapper.g.dart diff --git a/packages/in_app_purchase/in_app_purchase_storekit/lib/src/store_kit_wrappers/enum_converters.dart b/packages/in_app_purchase/in_app_purchase_storekit/lib/src/store_kit_wrappers/enum_converters.dart index 6fb12ee5d54..0c7ad0a518c 100644 --- a/packages/in_app_purchase/in_app_purchase_storekit/lib/src/store_kit_wrappers/enum_converters.dart +++ b/packages/in_app_purchase/in_app_purchase_storekit/lib/src/store_kit_wrappers/enum_converters.dart @@ -121,6 +121,7 @@ class _SerializedEnums { late SKPaymentTransactionStateWrapper response; late SKSubscriptionPeriodUnit unit; late SKProductDiscountPaymentMode discountPaymentMode; + late SKProductDiscountType discountType; } /// Serializer for [SKProductDiscountType]. diff --git a/packages/in_app_purchase/in_app_purchase_storekit/lib/src/store_kit_wrappers/enum_converters.g.dart b/packages/in_app_purchase/in_app_purchase_storekit/lib/src/store_kit_wrappers/enum_converters.g.dart index d0c2dd267e6..25a4d28db79 100644 --- a/packages/in_app_purchase/in_app_purchase_storekit/lib/src/store_kit_wrappers/enum_converters.g.dart +++ b/packages/in_app_purchase/in_app_purchase_storekit/lib/src/store_kit_wrappers/enum_converters.g.dart @@ -15,6 +15,10 @@ _SerializedEnums _$SerializedEnumsFromJson(Map json) => _SerializedEnums() ..discountPaymentMode = $enumDecode( _$SKProductDiscountPaymentModeEnumMap, json['discountPaymentMode'], + ) + ..discountType = $enumDecode( + _$SKProductDiscountTypeEnumMap, + json['discountType'], ); const _$SKPaymentTransactionStateWrapperEnumMap = { @@ -39,3 +43,8 @@ const _$SKProductDiscountPaymentModeEnumMap = { SKProductDiscountPaymentMode.freeTrail: 2, SKProductDiscountPaymentMode.unspecified: -1, }; + +const _$SKProductDiscountTypeEnumMap = { + SKProductDiscountType.introductory: 0, + SKProductDiscountType.subscription: 1, +}; diff --git a/packages/in_app_purchase/in_app_purchase_storekit/lib/src/store_kit_wrappers/sk_payment_queue_wrapper.dart b/packages/in_app_purchase/in_app_purchase_storekit/lib/src/store_kit_wrappers/sk_payment_queue_wrapper.dart index c5ba0f04815..054c94dd7dc 100644 --- a/packages/in_app_purchase/in_app_purchase_storekit/lib/src/store_kit_wrappers/sk_payment_queue_wrapper.dart +++ b/packages/in_app_purchase/in_app_purchase_storekit/lib/src/store_kit_wrappers/sk_payment_queue_wrapper.dart @@ -378,7 +378,7 @@ class SKError { /// /// Any key of the map must be a valid [NSErrorUserInfoKey](https://developer.apple.com/documentation/foundation/nserroruserinfokey?language=objc). @JsonKey(defaultValue: {}) - final Map? userInfo; + final Map? userInfo; @override bool operator ==(Object other) { diff --git a/packages/in_app_purchase/in_app_purchase_storekit/lib/src/store_kit_wrappers/sk_payment_queue_wrapper.g.dart b/packages/in_app_purchase/in_app_purchase_storekit/lib/src/store_kit_wrappers/sk_payment_queue_wrapper.g.dart new file mode 100644 index 00000000000..9e8080cba5c --- /dev/null +++ b/packages/in_app_purchase/in_app_purchase_storekit/lib/src/store_kit_wrappers/sk_payment_queue_wrapper.g.dart @@ -0,0 +1,57 @@ +// GENERATED CODE - DO NOT MODIFY BY HAND + +part of 'sk_payment_queue_wrapper.dart'; + +// ************************************************************************** +// JsonSerializableGenerator +// ************************************************************************** + +SKError _$SKErrorFromJson(Map json) => SKError( + code: (json['code'] as num?)?.toInt() ?? 0, + domain: json['domain'] as String? ?? '', + userInfo: + (json['userInfo'] as Map?)?.map((k, e) => MapEntry(k as String, e)) ?? {}, +); + +SKPaymentWrapper _$SKPaymentWrapperFromJson(Map json) => SKPaymentWrapper( + productIdentifier: json['productIdentifier'] as String? ?? '', + applicationUsername: json['applicationUsername'] as String?, + requestData: json['requestData'] as String?, + quantity: (json['quantity'] as num?)?.toInt() ?? 0, + simulatesAskToBuyInSandbox: + json['simulatesAskToBuyInSandbox'] as bool? ?? false, + paymentDiscount: json['paymentDiscount'] == null + ? null + : SKPaymentDiscountWrapper.fromJson( + Map.from(json['paymentDiscount'] as Map), + ), +); + +Map _$SKPaymentWrapperToJson(SKPaymentWrapper instance) => + { + 'productIdentifier': instance.productIdentifier, + 'applicationUsername': instance.applicationUsername, + 'requestData': instance.requestData, + 'quantity': instance.quantity, + 'simulatesAskToBuyInSandbox': instance.simulatesAskToBuyInSandbox, + 'paymentDiscount': instance.paymentDiscount, + }; + +SKPaymentDiscountWrapper _$SKPaymentDiscountWrapperFromJson(Map json) => + SKPaymentDiscountWrapper( + identifier: json['identifier'] as String, + keyIdentifier: json['keyIdentifier'] as String, + nonce: json['nonce'] as String, + signature: json['signature'] as String, + timestamp: (json['timestamp'] as num).toInt(), + ); + +Map _$SKPaymentDiscountWrapperToJson( + SKPaymentDiscountWrapper instance, +) => { + 'identifier': instance.identifier, + 'keyIdentifier': instance.keyIdentifier, + 'nonce': instance.nonce, + 'signature': instance.signature, + 'timestamp': instance.timestamp, +}; 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 20bdd5e5702..571dac00e21 100644 --- a/packages/in_app_purchase/in_app_purchase_storekit/pubspec.yaml +++ b/packages/in_app_purchase/in_app_purchase_storekit/pubspec.yaml @@ -24,7 +24,7 @@ dependencies: flutter: sdk: flutter in_app_purchase_platform_interface: ^1.4.0 - json_annotation: ^4.3.0 + json_annotation: ^4.9.0 dev_dependencies: build_runner: ^2.0.0 From 488ffe0015e6c83167e577dbab404d47060859d2 Mon Sep 17 00:00:00 2001 From: FMorschel <52160996+FMorschel@users.noreply.github.com> Date: Fri, 12 Sep 2025 15:51:27 -0300 Subject: [PATCH 4/4] updates version for IAP --- .../in_app_purchase/in_app_purchase_storekit/CHANGELOG.md | 4 ++++ .../in_app_purchase/in_app_purchase_storekit/pubspec.yaml | 2 +- 2 files changed, 5 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 f31e13d22bf..c5cfa3b1e6a 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.4.5 + +* Makes `SKError.userInfo` key non-nullable to comply with json serialization requirements. + ## 0.4.4+1 * Removes code for versions of iOS older than 13.0. 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 571dac00e21..83f72e9b815 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.4.4+1 +version: 0.4.5 environment: sdk: ^3.9.0