[in_app_purchase] Update to the latest pkg:json_serializable (#4434)

- Remove unneeded class now that enum helpers can be generated without one
- Code reorganization
- Remove superflous JsonKey values
diff --git a/packages/in_app_purchase/in_app_purchase/build.yaml b/packages/in_app_purchase/in_app_purchase/build.yaml
deleted file mode 100644
index e15cf14..0000000
--- a/packages/in_app_purchase/in_app_purchase/build.yaml
+++ /dev/null
@@ -1,7 +0,0 @@
-targets:
-  $default:
-    builders:
-      json_serializable:
-        options:
-          any_map: true
-          create_to_json: true
diff --git a/packages/in_app_purchase/in_app_purchase_android/CHANGELOG.md b/packages/in_app_purchase/in_app_purchase_android/CHANGELOG.md
index a01eb9f..c504bd7 100644
--- a/packages/in_app_purchase/in_app_purchase_android/CHANGELOG.md
+++ b/packages/in_app_purchase/in_app_purchase_android/CHANGELOG.md
@@ -1,6 +1,12 @@
+## 0.1.6
+
+* Require Dart SDK >= 2.14.
+* Update `json_annotation` dependency to `^4.3.0`.
+
 ## 0.1.5+1
 
 * Fix a broken link in the README.
+
 ## 0.1.5
 
 * Introduced the `SkuDetailsWrapper.introductoryPriceAmountMicros` field of the correct type (`int`) and deprecated the `SkuDetailsWrapper.introductoryPriceMicros` field.
diff --git a/packages/in_app_purchase/in_app_purchase_android/build.yaml b/packages/in_app_purchase/in_app_purchase_android/build.yaml
index e15cf14..651a557 100644
--- a/packages/in_app_purchase/in_app_purchase_android/build.yaml
+++ b/packages/in_app_purchase/in_app_purchase_android/build.yaml
@@ -1,7 +1,8 @@
+# See https://pub.dev/packages/build_config
 targets:
   $default:
     builders:
       json_serializable:
         options:
           any_map: true
-          create_to_json: true
+          create_to_json: false
diff --git a/packages/in_app_purchase/in_app_purchase_android/lib/src/billing_client_wrappers/billing_client_wrapper.dart b/packages/in_app_purchase/in_app_purchase_android/lib/src/billing_client_wrappers/billing_client_wrapper.dart
index 4393d1d..0e7024a 100644
--- a/packages/in_app_purchase/in_app_purchase_android/lib/src/billing_client_wrappers/billing_client_wrapper.dart
+++ b/packages/in_app_purchase/in_app_purchase_android/lib/src/billing_client_wrappers/billing_client_wrapper.dart
@@ -3,14 +3,17 @@
 // found in the LICENSE file.
 
 import 'dart:async';
-import 'package:flutter/services.dart';
+
 import 'package:flutter/foundation.dart';
+import 'package:flutter/services.dart';
 import 'package:json_annotation/json_annotation.dart';
+
 import '../../billing_client_wrappers.dart';
 import '../channel.dart';
 import 'purchase_wrapper.dart';
 import 'sku_details_wrapper.dart';
-import 'enum_converters.dart';
+
+part 'billing_client_wrapper.g.dart';
 
 /// Method identifier for the OnPurchaseUpdated method channel method.
 @visibleForTesting
@@ -364,6 +367,7 @@
 /// [`BillingClient.BillingResponse`](https://developer.android.com/reference/com/android/billingclient/api/BillingClient.BillingResponse).
 /// See the `BillingResponse` docs for more explanation of the different
 /// constants.
+@JsonEnum(alwaysCreate: true)
 enum BillingResponse {
   // WARNING: Changes to this class need to be reflected in our generated code.
   // Run `flutter packages pub run build_runner watch` to rebuild and watch for
@@ -418,11 +422,32 @@
   itemNotOwned,
 }
 
+/// Serializer for [BillingResponse].
+///
+/// Use these in `@JsonSerializable()` classes by annotating them with
+/// `@BillingResponseConverter()`.
+class BillingResponseConverter implements JsonConverter<BillingResponse, int?> {
+  /// Default const constructor.
+  const BillingResponseConverter();
+
+  @override
+  BillingResponse fromJson(int? json) {
+    if (json == null) {
+      return BillingResponse.error;
+    }
+    return $enumDecode(_$BillingResponseEnumMap, json);
+  }
+
+  @override
+  int toJson(BillingResponse object) => _$BillingResponseEnumMap[object]!;
+}
+
 /// Enum representing potential [SkuDetailsWrapper.type]s.
 ///
 /// Wraps
 /// [`BillingClient.SkuType`](https://developer.android.com/reference/com/android/billingclient/api/BillingClient.SkuType)
 /// See the linked documentation for an explanation of the different constants.
+@JsonEnum(alwaysCreate: true)
 enum SkuType {
   // WARNING: Changes to this class need to be reflected in our generated code.
   // Run `flutter packages pub run build_runner watch` to rebuild and watch for
@@ -437,6 +462,26 @@
   subs,
 }
 
+/// Serializer for [SkuType].
+///
+/// Use these in `@JsonSerializable()` classes by annotating them with
+/// `@SkuTypeConverter()`.
+class SkuTypeConverter implements JsonConverter<SkuType, String?> {
+  /// Default const constructor.
+  const SkuTypeConverter();
+
+  @override
+  SkuType fromJson(String? json) {
+    if (json == null) {
+      return SkuType.inapp;
+    }
+    return $enumDecode(_$SkuTypeEnumMap, json);
+  }
+
+  @override
+  String toJson(SkuType object) => _$SkuTypeEnumMap[object]!;
+}
+
 /// Enum representing the proration mode.
 ///
 /// When upgrading or downgrading a subscription, set this mode to provide details
@@ -444,6 +489,7 @@
 ///
 /// Wraps [`BillingFlowParams.ProrationMode`](https://developer.android.com/reference/com/android/billingclient/api/BillingFlowParams.ProrationMode)
 /// See the linked documentation for an explanation of the different constants.
+@JsonEnum(alwaysCreate: true)
 enum ProrationMode {
 // WARNING: Changes to this class need to be reflected in our generated code.
 // Run `flutter packages pub run build_runner watch` to rebuild and watch for
@@ -477,7 +523,28 @@
   deferred,
 }
 
+/// Serializer for [ProrationMode].
+///
+/// Use these in `@JsonSerializable()` classes by annotating them with
+/// `@ProrationModeConverter()`.
+class ProrationModeConverter implements JsonConverter<ProrationMode, int?> {
+  /// Default const constructor.
+  const ProrationModeConverter();
+
+  @override
+  ProrationMode fromJson(int? json) {
+    if (json == null) {
+      return ProrationMode.unknownSubscriptionUpgradeDowngradePolicy;
+    }
+    return $enumDecode(_$ProrationModeEnumMap, json);
+  }
+
+  @override
+  int toJson(ProrationMode object) => _$ProrationModeEnumMap[object]!;
+}
+
 /// Features/capabilities supported by [BillingClient.isFeatureSupported()](https://developer.android.com/reference/com/android/billingclient/api/BillingClient.FeatureType).
+@JsonEnum(alwaysCreate: true)
 enum BillingClientFeature {
   // WARNING: Changes to this class need to be reflected in our generated code.
   // Run `flutter packages pub run build_runner watch` to rebuild and watch for
@@ -504,3 +571,24 @@
   @JsonValue('subscriptionsUpdate')
   subscriptionsUpdate
 }
+
+/// Serializer for [BillingClientFeature].
+///
+/// Use these in `@JsonSerializable()` classes by annotating them with
+/// `@BillingClientFeatureConverter()`.
+class BillingClientFeatureConverter
+    implements JsonConverter<BillingClientFeature, String> {
+  /// Default const constructor.
+  const BillingClientFeatureConverter();
+
+  @override
+  BillingClientFeature fromJson(String json) {
+    return $enumDecode<BillingClientFeature, dynamic>(
+        _$BillingClientFeatureEnumMap.cast<BillingClientFeature, dynamic>(),
+        json);
+  }
+
+  @override
+  String toJson(BillingClientFeature object) =>
+      _$BillingClientFeatureEnumMap[object]!;
+}
diff --git a/packages/in_app_purchase/in_app_purchase_android/lib/src/billing_client_wrappers/billing_client_wrapper.g.dart b/packages/in_app_purchase/in_app_purchase_android/lib/src/billing_client_wrappers/billing_client_wrapper.g.dart
new file mode 100644
index 0000000..efe7656
--- /dev/null
+++ b/packages/in_app_purchase/in_app_purchase_android/lib/src/billing_client_wrappers/billing_client_wrapper.g.dart
@@ -0,0 +1,43 @@
+// GENERATED CODE - DO NOT MODIFY BY HAND
+
+part of 'billing_client_wrapper.dart';
+
+// **************************************************************************
+// JsonSerializableGenerator
+// **************************************************************************
+
+const _$BillingResponseEnumMap = {
+  BillingResponse.serviceTimeout: -3,
+  BillingResponse.featureNotSupported: -2,
+  BillingResponse.serviceDisconnected: -1,
+  BillingResponse.ok: 0,
+  BillingResponse.userCanceled: 1,
+  BillingResponse.serviceUnavailable: 2,
+  BillingResponse.billingUnavailable: 3,
+  BillingResponse.itemUnavailable: 4,
+  BillingResponse.developerError: 5,
+  BillingResponse.error: 6,
+  BillingResponse.itemAlreadyOwned: 7,
+  BillingResponse.itemNotOwned: 8,
+};
+
+const _$SkuTypeEnumMap = {
+  SkuType.inapp: 'inapp',
+  SkuType.subs: 'subs',
+};
+
+const _$ProrationModeEnumMap = {
+  ProrationMode.unknownSubscriptionUpgradeDowngradePolicy: 0,
+  ProrationMode.immediateWithTimeProration: 1,
+  ProrationMode.immediateAndChargeProratedPrice: 2,
+  ProrationMode.immediateWithoutProration: 3,
+  ProrationMode.deferred: 4,
+};
+
+const _$BillingClientFeatureEnumMap = {
+  BillingClientFeature.inAppItemsOnVR: 'inAppItemsOnVr',
+  BillingClientFeature.priceChangeConfirmation: 'priceChangeConfirmation',
+  BillingClientFeature.subscriptions: 'subscriptions',
+  BillingClientFeature.subscriptionsOnVR: 'subscriptionsOnVr',
+  BillingClientFeature.subscriptionsUpdate: 'subscriptionsUpdate',
+};
diff --git a/packages/in_app_purchase/in_app_purchase_android/lib/src/billing_client_wrappers/enum_converters.dart b/packages/in_app_purchase/in_app_purchase_android/lib/src/billing_client_wrappers/enum_converters.dart
deleted file mode 100644
index 931d92f..0000000
--- a/packages/in_app_purchase/in_app_purchase_android/lib/src/billing_client_wrappers/enum_converters.dart
+++ /dev/null
@@ -1,143 +0,0 @@
-// 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 'package:in_app_purchase_platform_interface/in_app_purchase_platform_interface.dart';
-import 'package:json_annotation/json_annotation.dart';
-
-import '../../billing_client_wrappers.dart';
-
-part 'enum_converters.g.dart';
-
-/// Serializer for [BillingResponse].
-///
-/// Use these in `@JsonSerializable()` classes by annotating them with
-/// `@BillingResponseConverter()`.
-class BillingResponseConverter implements JsonConverter<BillingResponse, int?> {
-  /// Default const constructor.
-  const BillingResponseConverter();
-
-  @override
-  BillingResponse fromJson(int? json) {
-    if (json == null) {
-      return BillingResponse.error;
-    }
-    return _$enumDecode<BillingResponse, dynamic>(
-        _$BillingResponseEnumMap.cast<BillingResponse, dynamic>(), json);
-  }
-
-  @override
-  int toJson(BillingResponse object) => _$BillingResponseEnumMap[object]!;
-}
-
-/// Serializer for [SkuType].
-///
-/// Use these in `@JsonSerializable()` classes by annotating them with
-/// `@SkuTypeConverter()`.
-class SkuTypeConverter implements JsonConverter<SkuType, String?> {
-  /// Default const constructor.
-  const SkuTypeConverter();
-
-  @override
-  SkuType fromJson(String? json) {
-    if (json == null) {
-      return SkuType.inapp;
-    }
-    return _$enumDecode<SkuType, dynamic>(
-        _$SkuTypeEnumMap.cast<SkuType, dynamic>(), json);
-  }
-
-  @override
-  String toJson(SkuType object) => _$SkuTypeEnumMap[object]!;
-}
-
-/// Serializer for [ProrationMode].
-///
-/// Use these in `@JsonSerializable()` classes by annotating them with
-/// `@ProrationModeConverter()`.
-class ProrationModeConverter implements JsonConverter<ProrationMode, int?> {
-  /// Default const constructor.
-  const ProrationModeConverter();
-
-  @override
-  ProrationMode fromJson(int? json) {
-    if (json == null) {
-      return ProrationMode.unknownSubscriptionUpgradeDowngradePolicy;
-    }
-    return _$enumDecode<ProrationMode, dynamic>(
-        _$ProrationModeEnumMap.cast<ProrationMode, dynamic>(), json);
-  }
-
-  @override
-  int toJson(ProrationMode object) => _$ProrationModeEnumMap[object]!;
-}
-
-/// Serializer for [PurchaseStateWrapper].
-///
-/// Use these in `@JsonSerializable()` classes by annotating them with
-/// `@PurchaseStateConverter()`.
-class PurchaseStateConverter
-    implements JsonConverter<PurchaseStateWrapper, int?> {
-  /// Default const constructor.
-  const PurchaseStateConverter();
-
-  @override
-  PurchaseStateWrapper fromJson(int? json) {
-    if (json == null) {
-      return PurchaseStateWrapper.unspecified_state;
-    }
-    return _$enumDecode<PurchaseStateWrapper, dynamic>(
-        _$PurchaseStateWrapperEnumMap.cast<PurchaseStateWrapper, dynamic>(),
-        json);
-  }
-
-  @override
-  int toJson(PurchaseStateWrapper object) =>
-      _$PurchaseStateWrapperEnumMap[object]!;
-
-  /// Converts the purchase state stored in `object` to a [PurchaseStatus].
-  ///
-  /// [PurchaseStateWrapper.unspecified_state] is mapped to [PurchaseStatus.error].
-  PurchaseStatus toPurchaseStatus(PurchaseStateWrapper object) {
-    switch (object) {
-      case PurchaseStateWrapper.pending:
-        return PurchaseStatus.pending;
-      case PurchaseStateWrapper.purchased:
-        return PurchaseStatus.purchased;
-      case PurchaseStateWrapper.unspecified_state:
-        return PurchaseStatus.error;
-    }
-  }
-}
-
-/// Serializer for [BillingClientFeature].
-///
-/// Use these in `@JsonSerializable()` classes by annotating them with
-/// `@BillingClientFeatureConverter()`.
-class BillingClientFeatureConverter
-    implements JsonConverter<BillingClientFeature, String> {
-  /// Default const constructor.
-  const BillingClientFeatureConverter();
-
-  @override
-  BillingClientFeature fromJson(String json) {
-    return _$enumDecode<BillingClientFeature, dynamic>(
-        _$BillingClientFeatureEnumMap.cast<BillingClientFeature, dynamic>(),
-        json);
-  }
-
-  @override
-  String toJson(BillingClientFeature object) =>
-      _$BillingClientFeatureEnumMap[object]!;
-}
-
-// Define a class so we generate serializer helper methods for the enums
-// See https://github.com/google/json_serializable.dart/issues/778
-@JsonSerializable()
-class _SerializedEnums {
-  late BillingResponse response;
-  late SkuType type;
-  late PurchaseStateWrapper purchaseState;
-  late ProrationMode prorationMode;
-  late BillingClientFeature billingClientFeature;
-}
diff --git a/packages/in_app_purchase/in_app_purchase_android/lib/src/billing_client_wrappers/enum_converters.g.dart b/packages/in_app_purchase/in_app_purchase_android/lib/src/billing_client_wrappers/enum_converters.g.dart
deleted file mode 100644
index fe92f56..0000000
--- a/packages/in_app_purchase/in_app_purchase_android/lib/src/billing_client_wrappers/enum_converters.g.dart
+++ /dev/null
@@ -1,94 +0,0 @@
-// GENERATED CODE - DO NOT MODIFY BY HAND
-
-part of 'enum_converters.dart';
-
-// **************************************************************************
-// JsonSerializableGenerator
-// **************************************************************************
-
-_SerializedEnums _$SerializedEnumsFromJson(Map json) => _SerializedEnums()
-  ..response = _$enumDecode(_$BillingResponseEnumMap, json['response'])
-  ..type = _$enumDecode(_$SkuTypeEnumMap, json['type'])
-  ..purchaseState =
-      _$enumDecode(_$PurchaseStateWrapperEnumMap, json['purchaseState'])
-  ..prorationMode = _$enumDecode(_$ProrationModeEnumMap, json['prorationMode'])
-  ..billingClientFeature =
-      _$enumDecode(_$BillingClientFeatureEnumMap, json['billingClientFeature']);
-
-Map<String, dynamic> _$SerializedEnumsToJson(_SerializedEnums instance) =>
-    <String, dynamic>{
-      'response': _$BillingResponseEnumMap[instance.response],
-      'type': _$SkuTypeEnumMap[instance.type],
-      'purchaseState': _$PurchaseStateWrapperEnumMap[instance.purchaseState],
-      'prorationMode': _$ProrationModeEnumMap[instance.prorationMode],
-      'billingClientFeature':
-          _$BillingClientFeatureEnumMap[instance.billingClientFeature],
-    };
-
-K _$enumDecode<K, V>(
-  Map<K, V> enumValues,
-  Object? source, {
-  K? unknownValue,
-}) {
-  if (source == null) {
-    throw ArgumentError(
-      'A value must be provided. Supported values: '
-      '${enumValues.values.join(', ')}',
-    );
-  }
-
-  return enumValues.entries.singleWhere(
-    (e) => e.value == source,
-    orElse: () {
-      if (unknownValue == null) {
-        throw ArgumentError(
-          '`$source` is not one of the supported values: '
-          '${enumValues.values.join(', ')}',
-        );
-      }
-      return MapEntry(unknownValue, enumValues.values.first);
-    },
-  ).key;
-}
-
-const _$BillingResponseEnumMap = {
-  BillingResponse.serviceTimeout: -3,
-  BillingResponse.featureNotSupported: -2,
-  BillingResponse.serviceDisconnected: -1,
-  BillingResponse.ok: 0,
-  BillingResponse.userCanceled: 1,
-  BillingResponse.serviceUnavailable: 2,
-  BillingResponse.billingUnavailable: 3,
-  BillingResponse.itemUnavailable: 4,
-  BillingResponse.developerError: 5,
-  BillingResponse.error: 6,
-  BillingResponse.itemAlreadyOwned: 7,
-  BillingResponse.itemNotOwned: 8,
-};
-
-const _$SkuTypeEnumMap = {
-  SkuType.inapp: 'inapp',
-  SkuType.subs: 'subs',
-};
-
-const _$PurchaseStateWrapperEnumMap = {
-  PurchaseStateWrapper.unspecified_state: 0,
-  PurchaseStateWrapper.purchased: 1,
-  PurchaseStateWrapper.pending: 2,
-};
-
-const _$ProrationModeEnumMap = {
-  ProrationMode.unknownSubscriptionUpgradeDowngradePolicy: 0,
-  ProrationMode.immediateWithTimeProration: 1,
-  ProrationMode.immediateAndChargeProratedPrice: 2,
-  ProrationMode.immediateWithoutProration: 3,
-  ProrationMode.deferred: 4,
-};
-
-const _$BillingClientFeatureEnumMap = {
-  BillingClientFeature.inAppItemsOnVR: 'inAppItemsOnVr',
-  BillingClientFeature.priceChangeConfirmation: 'priceChangeConfirmation',
-  BillingClientFeature.subscriptions: 'subscriptions',
-  BillingClientFeature.subscriptionsOnVR: 'subscriptionsOnVr',
-  BillingClientFeature.subscriptionsUpdate: 'subscriptionsUpdate',
-};
diff --git a/packages/in_app_purchase/in_app_purchase_android/lib/src/billing_client_wrappers/purchase_wrapper.dart b/packages/in_app_purchase/in_app_purchase_android/lib/src/billing_client_wrappers/purchase_wrapper.dart
index 374c26a..742288e 100644
--- a/packages/in_app_purchase/in_app_purchase_android/lib/src/billing_client_wrappers/purchase_wrapper.dart
+++ b/packages/in_app_purchase/in_app_purchase_android/lib/src/billing_client_wrappers/purchase_wrapper.dart
@@ -3,10 +3,11 @@
 // found in the LICENSE file.
 
 import 'dart:ui' show hashValues;
+
 import 'package:flutter/foundation.dart';
 import 'package:in_app_purchase_platform_interface/in_app_purchase_platform_interface.dart';
 import 'package:json_annotation/json_annotation.dart';
-import 'enum_converters.dart';
+
 import 'billing_client_wrapper.dart';
 import 'sku_details_wrapper.dart';
 
@@ -323,6 +324,7 @@
 /// Wraps
 /// [`BillingClient.api.Purchase.PurchaseState`](https://developer.android.com/reference/com/android/billingclient/api/Purchase.PurchaseState.html).
 /// * See also: [PurchaseWrapper].
+@JsonEnum(alwaysCreate: true)
 enum PurchaseStateWrapper {
   /// The state is unspecified.
   ///
@@ -348,3 +350,39 @@
   @JsonValue(2)
   pending,
 }
+
+/// Serializer for [PurchaseStateWrapper].
+///
+/// Use these in `@JsonSerializable()` classes by annotating them with
+/// `@PurchaseStateConverter()`.
+class PurchaseStateConverter
+    implements JsonConverter<PurchaseStateWrapper, int?> {
+  /// Default const constructor.
+  const PurchaseStateConverter();
+
+  @override
+  PurchaseStateWrapper fromJson(int? json) {
+    if (json == null) {
+      return PurchaseStateWrapper.unspecified_state;
+    }
+    return $enumDecode(_$PurchaseStateWrapperEnumMap, json);
+  }
+
+  @override
+  int toJson(PurchaseStateWrapper object) =>
+      _$PurchaseStateWrapperEnumMap[object]!;
+
+  /// Converts the purchase state stored in `object` to a [PurchaseStatus].
+  ///
+  /// [PurchaseStateWrapper.unspecified_state] is mapped to [PurchaseStatus.error].
+  PurchaseStatus toPurchaseStatus(PurchaseStateWrapper object) {
+    switch (object) {
+      case PurchaseStateWrapper.pending:
+        return PurchaseStatus.pending;
+      case PurchaseStateWrapper.purchased:
+        return PurchaseStatus.purchased;
+      case PurchaseStateWrapper.unspecified_state:
+        return PurchaseStatus.error;
+    }
+  }
+}
diff --git a/packages/in_app_purchase/in_app_purchase_android/lib/src/billing_client_wrappers/purchase_wrapper.g.dart b/packages/in_app_purchase/in_app_purchase_android/lib/src/billing_client_wrappers/purchase_wrapper.g.dart
index b5d9fe8..5815a86 100644
--- a/packages/in_app_purchase/in_app_purchase_android/lib/src/billing_client_wrappers/purchase_wrapper.g.dart
+++ b/packages/in_app_purchase/in_app_purchase_android/lib/src/billing_client_wrappers/purchase_wrapper.g.dart
@@ -23,24 +23,6 @@
       obfuscatedProfileId: json['obfuscatedProfileId'] as String?,
     );
 
-Map<String, dynamic> _$PurchaseWrapperToJson(PurchaseWrapper instance) =>
-    <String, dynamic>{
-      'orderId': instance.orderId,
-      'packageName': instance.packageName,
-      'purchaseTime': instance.purchaseTime,
-      'purchaseToken': instance.purchaseToken,
-      'signature': instance.signature,
-      'sku': instance.sku,
-      'isAutoRenewing': instance.isAutoRenewing,
-      'originalJson': instance.originalJson,
-      'developerPayload': instance.developerPayload,
-      'isAcknowledged': instance.isAcknowledged,
-      'purchaseState':
-          const PurchaseStateConverter().toJson(instance.purchaseState),
-      'obfuscatedAccountId': instance.obfuscatedAccountId,
-      'obfuscatedProfileId': instance.obfuscatedProfileId,
-    };
-
 PurchaseHistoryRecordWrapper _$PurchaseHistoryRecordWrapperFromJson(Map json) =>
     PurchaseHistoryRecordWrapper(
       purchaseTime: json['purchaseTime'] as int? ?? 0,
@@ -51,17 +33,6 @@
       developerPayload: json['developerPayload'] as String?,
     );
 
-Map<String, dynamic> _$PurchaseHistoryRecordWrapperToJson(
-        PurchaseHistoryRecordWrapper instance) =>
-    <String, dynamic>{
-      'purchaseTime': instance.purchaseTime,
-      'purchaseToken': instance.purchaseToken,
-      'signature': instance.signature,
-      'sku': instance.sku,
-      'originalJson': instance.originalJson,
-      'developerPayload': instance.developerPayload,
-    };
-
 PurchasesResultWrapper _$PurchasesResultWrapperFromJson(Map json) =>
     PurchasesResultWrapper(
       responseCode: const BillingResponseConverter()
@@ -77,15 +48,6 @@
           [],
     );
 
-Map<String, dynamic> _$PurchasesResultWrapperToJson(
-        PurchasesResultWrapper instance) =>
-    <String, dynamic>{
-      'billingResult': instance.billingResult,
-      'responseCode':
-          const BillingResponseConverter().toJson(instance.responseCode),
-      'purchasesList': instance.purchasesList,
-    };
-
 PurchasesHistoryResult _$PurchasesHistoryResultFromJson(Map json) =>
     PurchasesHistoryResult(
       billingResult:
@@ -100,9 +62,8 @@
               [],
     );
 
-Map<String, dynamic> _$PurchasesHistoryResultToJson(
-        PurchasesHistoryResult instance) =>
-    <String, dynamic>{
-      'billingResult': instance.billingResult,
-      'purchaseHistoryRecordList': instance.purchaseHistoryRecordList,
-    };
+const _$PurchaseStateWrapperEnumMap = {
+  PurchaseStateWrapper.unspecified_state: 0,
+  PurchaseStateWrapper.purchased: 1,
+  PurchaseStateWrapper.pending: 2,
+};
diff --git a/packages/in_app_purchase/in_app_purchase_android/lib/src/billing_client_wrappers/sku_details_wrapper.dart b/packages/in_app_purchase/in_app_purchase_android/lib/src/billing_client_wrappers/sku_details_wrapper.dart
index 754f7a3..8069a1f 100644
--- a/packages/in_app_purchase/in_app_purchase_android/lib/src/billing_client_wrappers/sku_details_wrapper.dart
+++ b/packages/in_app_purchase/in_app_purchase_android/lib/src/billing_client_wrappers/sku_details_wrapper.dart
@@ -3,10 +3,11 @@
 // found in the LICENSE file.
 
 import 'dart:ui' show hashValues;
+
 import 'package:flutter/foundation.dart';
 import 'package:json_annotation/json_annotation.dart';
+
 import 'billing_client_wrapper.dart';
-import 'enum_converters.dart';
 
 // WARNING: Changes to `@JsonSerializable` classes need to be reflected in the
 // below generated file. Run `flutter packages pub run build_runner watch` to
@@ -75,7 +76,6 @@
   ///
   /// Returns 0 if the SKU is not a subscription or doesn't have an introductory
   /// period.
-  @JsonKey(name: 'introductoryPriceAmountMicros', defaultValue: 0)
   final int introductoryPriceAmountMicros;
 
   /// String representation of [introductoryPrice] in micro-units 990000
diff --git a/packages/in_app_purchase/in_app_purchase_android/lib/src/billing_client_wrappers/sku_details_wrapper.g.dart b/packages/in_app_purchase/in_app_purchase_android/lib/src/billing_client_wrappers/sku_details_wrapper.g.dart
index 53d5931..05eb6be 100644
--- a/packages/in_app_purchase/in_app_purchase_android/lib/src/billing_client_wrappers/sku_details_wrapper.g.dart
+++ b/packages/in_app_purchase/in_app_purchase_android/lib/src/billing_client_wrappers/sku_details_wrapper.g.dart
@@ -26,26 +26,6 @@
       originalPriceAmountMicros: json['originalPriceAmountMicros'] as int? ?? 0,
     );
 
-Map<String, dynamic> _$SkuDetailsWrapperToJson(SkuDetailsWrapper instance) =>
-    <String, dynamic>{
-      'description': instance.description,
-      'freeTrialPeriod': instance.freeTrialPeriod,
-      'introductoryPrice': instance.introductoryPrice,
-      'introductoryPriceAmountMicros': instance.introductoryPriceAmountMicros,
-      'introductoryPriceCycles': instance.introductoryPriceCycles,
-      'introductoryPricePeriod': instance.introductoryPricePeriod,
-      'price': instance.price,
-      'priceAmountMicros': instance.priceAmountMicros,
-      'priceCurrencyCode': instance.priceCurrencyCode,
-      'priceCurrencySymbol': instance.priceCurrencySymbol,
-      'sku': instance.sku,
-      'subscriptionPeriod': instance.subscriptionPeriod,
-      'title': instance.title,
-      'type': const SkuTypeConverter().toJson(instance.type),
-      'originalPrice': instance.originalPrice,
-      'originalPriceAmountMicros': instance.originalPriceAmountMicros,
-    };
-
 SkuDetailsResponseWrapper _$SkuDetailsResponseWrapperFromJson(Map json) =>
     SkuDetailsResponseWrapper(
       billingResult:
@@ -59,24 +39,9 @@
           [],
     );
 
-Map<String, dynamic> _$SkuDetailsResponseWrapperToJson(
-        SkuDetailsResponseWrapper instance) =>
-    <String, dynamic>{
-      'billingResult': instance.billingResult,
-      'skuDetailsList': instance.skuDetailsList,
-    };
-
 BillingResultWrapper _$BillingResultWrapperFromJson(Map json) =>
     BillingResultWrapper(
       responseCode: const BillingResponseConverter()
           .fromJson(json['responseCode'] as int?),
       debugMessage: json['debugMessage'] as String?,
     );
-
-Map<String, dynamic> _$BillingResultWrapperToJson(
-        BillingResultWrapper instance) =>
-    <String, dynamic>{
-      'responseCode':
-          const BillingResponseConverter().toJson(instance.responseCode),
-      'debugMessage': instance.debugMessage,
-    };
diff --git a/packages/in_app_purchase/in_app_purchase_android/lib/src/types/google_play_purchase_details.dart b/packages/in_app_purchase/in_app_purchase_android/lib/src/types/google_play_purchase_details.dart
index 53b58bd..e607164 100644
--- a/packages/in_app_purchase/in_app_purchase_android/lib/src/types/google_play_purchase_details.dart
+++ b/packages/in_app_purchase/in_app_purchase_android/lib/src/types/google_play_purchase_details.dart
@@ -2,7 +2,6 @@
 // Use of this source code is governed by a BSD-style license that can be
 // found in the LICENSE file.
 
-import 'package:in_app_purchase_android/src/billing_client_wrappers/enum_converters.dart';
 import 'package:in_app_purchase_platform_interface/in_app_purchase_platform_interface.dart';
 
 import '../../billing_client_wrappers.dart';
diff --git a/packages/in_app_purchase/in_app_purchase_android/pubspec.yaml b/packages/in_app_purchase/in_app_purchase_android/pubspec.yaml
index d51abbb..7230b56 100644
--- a/packages/in_app_purchase/in_app_purchase_android/pubspec.yaml
+++ b/packages/in_app_purchase/in_app_purchase_android/pubspec.yaml
@@ -2,10 +2,10 @@
 description: An implementation for the Android platform of the Flutter `in_app_purchase` plugin. This uses the Android BillingClient APIs.
 repository: https://github.com/flutter/plugins/tree/master/packages/in_app_purchase/in_app_purchase_android
 issue_tracker: https://github.com/flutter/flutter/issues?q=is%3Aissue+is%3Aopen+label%3A%22p%3A+in_app_purchase%22
-version: 0.1.5+1
+version: 0.1.6
 
 environment:
-  sdk: ">=2.12.0 <3.0.0"
+  sdk: ">=2.14.0 <3.0.0"
   flutter: ">=2.0.0"
 
 flutter:
@@ -21,12 +21,12 @@
   flutter:
     sdk: flutter
   in_app_purchase_platform_interface: ^1.1.0
-  json_annotation: ^4.0.1
+  json_annotation: ^4.3.0
   meta: ^1.3.0
 
 dev_dependencies:
   build_runner: ^2.0.0
   flutter_test:
     sdk: flutter
-  json_serializable: ^5.0.2
+  json_serializable: ^6.0.0
   test: ^1.16.0
diff --git a/packages/in_app_purchase/in_app_purchase_android/test/billing_client_wrappers/billing_client_wrapper_test.dart b/packages/in_app_purchase/in_app_purchase_android/test/billing_client_wrappers/billing_client_wrapper_test.dart
index 02ae9ba..1a2a0e4 100644
--- a/packages/in_app_purchase/in_app_purchase_android/test/billing_client_wrappers/billing_client_wrapper_test.dart
+++ b/packages/in_app_purchase/in_app_purchase_android/test/billing_client_wrappers/billing_client_wrapper_test.dart
@@ -2,15 +2,14 @@
 // Use of this source code is governed by a BSD-style license that can be
 // found in the LICENSE file.
 
-import 'package:flutter_test/flutter_test.dart';
 import 'package:flutter/services.dart';
+import 'package:flutter_test/flutter_test.dart';
 import 'package:in_app_purchase_android/billing_client_wrappers.dart';
-import 'package:in_app_purchase_android/src/billing_client_wrappers/enum_converters.dart';
 import 'package:in_app_purchase_android/src/channel.dart';
 
 import '../stub_in_app_purchase_platform.dart';
-import 'sku_details_wrapper_test.dart';
 import 'purchase_wrapper_test.dart';
+import 'sku_details_wrapper_test.dart';
 
 void main() {
   TestWidgetsFlutterBinding.ensureInitialized();
diff --git a/packages/in_app_purchase/in_app_purchase_android/test/billing_client_wrappers/purchase_wrapper_test.dart b/packages/in_app_purchase/in_app_purchase_android/test/billing_client_wrappers/purchase_wrapper_test.dart
index 70b9fca..f513420 100644
--- a/packages/in_app_purchase/in_app_purchase_android/test/billing_client_wrappers/purchase_wrapper_test.dart
+++ b/packages/in_app_purchase/in_app_purchase_android/test/billing_client_wrappers/purchase_wrapper_test.dart
@@ -4,7 +4,6 @@
 
 import 'package:in_app_purchase_android/billing_client_wrappers.dart';
 import 'package:in_app_purchase_android/in_app_purchase_android.dart';
-import 'package:in_app_purchase_android/src/billing_client_wrappers/enum_converters.dart';
 import 'package:test/test.dart';
 
 final PurchaseWrapper dummyPurchase = PurchaseWrapper(
diff --git a/packages/in_app_purchase/in_app_purchase_android/test/billing_client_wrappers/sku_details_wrapper_test.dart b/packages/in_app_purchase/in_app_purchase_android/test/billing_client_wrappers/sku_details_wrapper_test.dart
index 18804a4..08cde07 100644
--- a/packages/in_app_purchase/in_app_purchase_android/test/billing_client_wrappers/sku_details_wrapper_test.dart
+++ b/packages/in_app_purchase/in_app_purchase_android/test/billing_client_wrappers/sku_details_wrapper_test.dart
@@ -2,10 +2,9 @@
 // Use of this source code is governed by a BSD-style license that can be
 // found in the LICENSE file.
 
+import 'package:in_app_purchase_android/billing_client_wrappers.dart';
 import 'package:in_app_purchase_android/src/types/google_play_product_details.dart';
 import 'package:test/test.dart';
-import 'package:in_app_purchase_android/billing_client_wrappers.dart';
-import 'package:in_app_purchase_android/src/billing_client_wrappers/enum_converters.dart';
 
 final SkuDetailsWrapper dummySkuDetails = SkuDetailsWrapper(
   description: 'description',
diff --git a/packages/in_app_purchase/in_app_purchase_android/test/in_app_purchase_android_platform_addition_test.dart b/packages/in_app_purchase/in_app_purchase_android/test/in_app_purchase_android_platform_addition_test.dart
index a478cab..ecefc4d 100644
--- a/packages/in_app_purchase/in_app_purchase_android/test/in_app_purchase_android_platform_addition_test.dart
+++ b/packages/in_app_purchase/in_app_purchase_android/test/in_app_purchase_android_platform_addition_test.dart
@@ -7,7 +7,6 @@
 import 'package:flutter_test/flutter_test.dart';
 import 'package:in_app_purchase_android/billing_client_wrappers.dart';
 import 'package:in_app_purchase_android/in_app_purchase_android.dart';
-import 'package:in_app_purchase_android/src/billing_client_wrappers/enum_converters.dart';
 import 'package:in_app_purchase_android/src/channel.dart';
 import 'package:in_app_purchase_android/src/in_app_purchase_android_platform_addition.dart';
 
diff --git a/packages/in_app_purchase/in_app_purchase_android/test/in_app_purchase_android_platform_test.dart b/packages/in_app_purchase/in_app_purchase_android/test/in_app_purchase_android_platform_test.dart
index 52ec08b..bd70489 100644
--- a/packages/in_app_purchase/in_app_purchase_android/test/in_app_purchase_android_platform_test.dart
+++ b/packages/in_app_purchase/in_app_purchase_android/test/in_app_purchase_android_platform_test.dart
@@ -9,7 +9,6 @@
 import 'package:flutter_test/flutter_test.dart';
 import 'package:in_app_purchase_android/billing_client_wrappers.dart';
 import 'package:in_app_purchase_android/in_app_purchase_android.dart';
-import 'package:in_app_purchase_android/src/billing_client_wrappers/enum_converters.dart';
 import 'package:in_app_purchase_android/src/channel.dart';
 import 'package:in_app_purchase_android/src/in_app_purchase_android_platform_addition.dart';
 import 'package:in_app_purchase_platform_interface/in_app_purchase_platform_interface.dart';
diff --git a/packages/in_app_purchase/in_app_purchase_ios/CHANGELOG.md b/packages/in_app_purchase/in_app_purchase_ios/CHANGELOG.md
index 76cafa9..4daa6a2 100644
--- a/packages/in_app_purchase/in_app_purchase_ios/CHANGELOG.md
+++ b/packages/in_app_purchase/in_app_purchase_ios/CHANGELOG.md
@@ -1,3 +1,7 @@
+## 0.1.4
+
+* Require Dart SDK >= 2.14.
+
 ## 0.1.3+5
 
 * Updated example app to handle restored purchases properly.
diff --git a/packages/in_app_purchase/in_app_purchase_ios/build.yaml b/packages/in_app_purchase/in_app_purchase_ios/build.yaml
index e15cf14..651a557 100644
--- a/packages/in_app_purchase/in_app_purchase_ios/build.yaml
+++ b/packages/in_app_purchase/in_app_purchase_ios/build.yaml
@@ -1,7 +1,8 @@
+# See https://pub.dev/packages/build_config
 targets:
   $default:
     builders:
       json_serializable:
         options:
           any_map: true
-          create_to_json: true
+          create_to_json: false
diff --git a/packages/in_app_purchase/in_app_purchase_ios/lib/src/store_kit_wrappers/enum_converters.dart b/packages/in_app_purchase/in_app_purchase_ios/lib/src/store_kit_wrappers/enum_converters.dart
index 7017826..8a0526f 100644
--- a/packages/in_app_purchase/in_app_purchase_ios/lib/src/store_kit_wrappers/enum_converters.dart
+++ b/packages/in_app_purchase/in_app_purchase_ios/lib/src/store_kit_wrappers/enum_converters.dart
@@ -23,7 +23,7 @@
     if (json == null) {
       return SKPaymentTransactionStateWrapper.unspecified;
     }
-    return _$enumDecode<SKPaymentTransactionStateWrapper, dynamic>(
+    return $enumDecode<SKPaymentTransactionStateWrapper, dynamic>(
         _$SKPaymentTransactionStateWrapperEnumMap
             .cast<SKPaymentTransactionStateWrapper, dynamic>(),
         json);
@@ -64,7 +64,7 @@
     if (json == null) {
       return SKSubscriptionPeriodUnit.day;
     }
-    return _$enumDecode<SKSubscriptionPeriodUnit, dynamic>(
+    return $enumDecode<SKSubscriptionPeriodUnit, dynamic>(
         _$SKSubscriptionPeriodUnitEnumMap
             .cast<SKSubscriptionPeriodUnit, dynamic>(),
         json);
@@ -89,7 +89,7 @@
     if (json == null) {
       return SKProductDiscountPaymentMode.payAsYouGo;
     }
-    return _$enumDecode<SKProductDiscountPaymentMode, dynamic>(
+    return $enumDecode<SKProductDiscountPaymentMode, dynamic>(
         _$SKProductDiscountPaymentModeEnumMap
             .cast<SKProductDiscountPaymentMode, dynamic>(),
         json);
diff --git a/packages/in_app_purchase/in_app_purchase_ios/lib/src/store_kit_wrappers/enum_converters.g.dart b/packages/in_app_purchase/in_app_purchase_ios/lib/src/store_kit_wrappers/enum_converters.g.dart
index ce0f56b..0d05720 100644
--- a/packages/in_app_purchase/in_app_purchase_ios/lib/src/store_kit_wrappers/enum_converters.g.dart
+++ b/packages/in_app_purchase/in_app_purchase_ios/lib/src/store_kit_wrappers/enum_converters.g.dart
@@ -8,45 +8,11 @@
 
 _SerializedEnums _$SerializedEnumsFromJson(Map json) => _SerializedEnums()
   ..response =
-      _$enumDecode(_$SKPaymentTransactionStateWrapperEnumMap, json['response'])
-  ..unit = _$enumDecode(_$SKSubscriptionPeriodUnitEnumMap, json['unit'])
-  ..discountPaymentMode = _$enumDecode(
+      $enumDecode(_$SKPaymentTransactionStateWrapperEnumMap, json['response'])
+  ..unit = $enumDecode(_$SKSubscriptionPeriodUnitEnumMap, json['unit'])
+  ..discountPaymentMode = $enumDecode(
       _$SKProductDiscountPaymentModeEnumMap, json['discountPaymentMode']);
 
-Map<String, dynamic> _$SerializedEnumsToJson(_SerializedEnums instance) =>
-    <String, dynamic>{
-      'response': _$SKPaymentTransactionStateWrapperEnumMap[instance.response],
-      'unit': _$SKSubscriptionPeriodUnitEnumMap[instance.unit],
-      'discountPaymentMode':
-          _$SKProductDiscountPaymentModeEnumMap[instance.discountPaymentMode],
-    };
-
-K _$enumDecode<K, V>(
-  Map<K, V> enumValues,
-  Object? source, {
-  K? unknownValue,
-}) {
-  if (source == null) {
-    throw ArgumentError(
-      'A value must be provided. Supported values: '
-      '${enumValues.values.join(', ')}',
-    );
-  }
-
-  return enumValues.entries.singleWhere(
-    (e) => e.value == source,
-    orElse: () {
-      if (unknownValue == null) {
-        throw ArgumentError(
-          '`$source` is not one of the supported values: '
-          '${enumValues.values.join(', ')}',
-        );
-      }
-      return MapEntry(unknownValue, enumValues.values.first);
-    },
-  ).key;
-}
-
 const _$SKPaymentTransactionStateWrapperEnumMap = {
   SKPaymentTransactionStateWrapper.purchasing: 0,
   SKPaymentTransactionStateWrapper.purchased: 1,
diff --git a/packages/in_app_purchase/in_app_purchase_ios/lib/src/store_kit_wrappers/sk_payment_queue_wrapper.dart b/packages/in_app_purchase/in_app_purchase_ios/lib/src/store_kit_wrappers/sk_payment_queue_wrapper.dart
index 079e750..3decba2 100644
--- a/packages/in_app_purchase/in_app_purchase_ios/lib/src/store_kit_wrappers/sk_payment_queue_wrapper.dart
+++ b/packages/in_app_purchase/in_app_purchase_ios/lib/src/store_kit_wrappers/sk_payment_queue_wrapper.dart
@@ -375,7 +375,7 @@
 /// [SKPaymentQueueWrapper.addPayment] directly with a product identifier to
 /// initiate a payment.
 @immutable
-@JsonSerializable()
+@JsonSerializable(createToJson: true)
 class SKPaymentWrapper {
   /// Creates a new [SKPaymentWrapper] with the provided information.
   const SKPaymentWrapper(
@@ -448,7 +448,6 @@
   ///
   /// See https://developer.apple.com/in-app-purchase/ for a guide on Sandbox
   /// testing.
-  @JsonKey(defaultValue: false)
   final bool simulatesAskToBuyInSandbox;
 
   @override
diff --git a/packages/in_app_purchase/in_app_purchase_ios/lib/src/store_kit_wrappers/sk_payment_queue_wrapper.g.dart b/packages/in_app_purchase/in_app_purchase_ios/lib/src/store_kit_wrappers/sk_payment_queue_wrapper.g.dart
index 4d2b5e4..8c0e64b 100644
--- a/packages/in_app_purchase/in_app_purchase_ios/lib/src/store_kit_wrappers/sk_payment_queue_wrapper.g.dart
+++ b/packages/in_app_purchase/in_app_purchase_ios/lib/src/store_kit_wrappers/sk_payment_queue_wrapper.g.dart
@@ -15,12 +15,6 @@
           {},
     );
 
-Map<String, dynamic> _$SKErrorToJson(SKError instance) => <String, dynamic>{
-      'code': instance.code,
-      'domain': instance.domain,
-      'userInfo': instance.userInfo,
-    };
-
 SKPaymentWrapper _$SKPaymentWrapperFromJson(Map json) => SKPaymentWrapper(
       productIdentifier: json['productIdentifier'] as String? ?? '',
       applicationUsername: json['applicationUsername'] as String?,
diff --git a/packages/in_app_purchase/in_app_purchase_ios/lib/src/store_kit_wrappers/sk_payment_transaction_wrappers.dart b/packages/in_app_purchase/in_app_purchase_ios/lib/src/store_kit_wrappers/sk_payment_transaction_wrappers.dart
index 01cd6db..885e9c0 100644
--- a/packages/in_app_purchase/in_app_purchase_ios/lib/src/store_kit_wrappers/sk_payment_transaction_wrappers.dart
+++ b/packages/in_app_purchase/in_app_purchase_ios/lib/src/store_kit_wrappers/sk_payment_transaction_wrappers.dart
@@ -3,10 +3,12 @@
 // found in the LICENSE file.
 
 import 'dart:ui' show hashValues;
+
 import 'package:json_annotation/json_annotation.dart';
-import 'sk_product_wrapper.dart';
-import 'sk_payment_queue_wrapper.dart';
+
 import 'enum_converters.dart';
+import 'sk_payment_queue_wrapper.dart';
+import 'sk_product_wrapper.dart';
 
 part 'sk_payment_transaction_wrappers.g.dart';
 
@@ -101,7 +103,7 @@
 ///
 /// Dart wrapper around StoreKit's
 /// [SKPaymentTransaction](https://developer.apple.com/documentation/storekit/skpaymenttransaction?language=objc).
-@JsonSerializable()
+@JsonSerializable(createToJson: true)
 class SKPaymentTransactionWrapper {
   /// Creates a new [SKPaymentTransactionWrapper] with the provided information.
   SKPaymentTransactionWrapper({
diff --git a/packages/in_app_purchase/in_app_purchase_ios/lib/src/store_kit_wrappers/sk_product_wrapper.g.dart b/packages/in_app_purchase/in_app_purchase_ios/lib/src/store_kit_wrappers/sk_product_wrapper.g.dart
index 485bf19..c9079ff 100644
--- a/packages/in_app_purchase/in_app_purchase_ios/lib/src/store_kit_wrappers/sk_product_wrapper.g.dart
+++ b/packages/in_app_purchase/in_app_purchase_ios/lib/src/store_kit_wrappers/sk_product_wrapper.g.dart
@@ -20,13 +20,6 @@
               [],
     );
 
-Map<String, dynamic> _$SkProductResponseWrapperToJson(
-        SkProductResponseWrapper instance) =>
-    <String, dynamic>{
-      'products': instance.products,
-      'invalidProductIdentifiers': instance.invalidProductIdentifiers,
-    };
-
 SKProductSubscriptionPeriodWrapper _$SKProductSubscriptionPeriodWrapperFromJson(
         Map json) =>
     SKProductSubscriptionPeriodWrapper(
@@ -35,13 +28,6 @@
           .fromJson(json['unit'] as int?),
     );
 
-Map<String, dynamic> _$SKProductSubscriptionPeriodWrapperToJson(
-        SKProductSubscriptionPeriodWrapper instance) =>
-    <String, dynamic>{
-      'numberOfUnits': instance.numberOfUnits,
-      'unit': const SKSubscriptionPeriodUnitConverter().toJson(instance.unit),
-    };
-
 SKProductDiscountWrapper _$SKProductDiscountWrapperFromJson(Map json) =>
     SKProductDiscountWrapper(
       price: json['price'] as String? ?? '',
@@ -58,17 +44,6 @@
       )),
     );
 
-Map<String, dynamic> _$SKProductDiscountWrapperToJson(
-        SKProductDiscountWrapper instance) =>
-    <String, dynamic>{
-      'price': instance.price,
-      'priceLocale': instance.priceLocale,
-      'numberOfPeriods': instance.numberOfPeriods,
-      'paymentMode': const SKProductDiscountPaymentModeConverter()
-          .toJson(instance.paymentMode),
-      'subscriptionPeriod': instance.subscriptionPeriod,
-    };
-
 SKProductWrapper _$SKProductWrapperFromJson(Map json) => SKProductWrapper(
       productIdentifier: json['productIdentifier'] as String? ?? '',
       localizedTitle: json['localizedTitle'] as String? ?? '',
@@ -92,29 +67,9 @@
               Map<String, dynamic>.from(json['introductoryPrice'] as Map)),
     );
 
-Map<String, dynamic> _$SKProductWrapperToJson(SKProductWrapper instance) =>
-    <String, dynamic>{
-      'productIdentifier': instance.productIdentifier,
-      'localizedTitle': instance.localizedTitle,
-      'localizedDescription': instance.localizedDescription,
-      'priceLocale': instance.priceLocale,
-      'subscriptionGroupIdentifier': instance.subscriptionGroupIdentifier,
-      'price': instance.price,
-      'subscriptionPeriod': instance.subscriptionPeriod,
-      'introductoryPrice': instance.introductoryPrice,
-    };
-
 SKPriceLocaleWrapper _$SKPriceLocaleWrapperFromJson(Map json) =>
     SKPriceLocaleWrapper(
       currencySymbol: json['currencySymbol'] as String? ?? '',
       currencyCode: json['currencyCode'] as String? ?? '',
       countryCode: json['countryCode'] as String? ?? '',
     );
-
-Map<String, dynamic> _$SKPriceLocaleWrapperToJson(
-        SKPriceLocaleWrapper instance) =>
-    <String, dynamic>{
-      'currencySymbol': instance.currencySymbol,
-      'currencyCode': instance.currencyCode,
-      'countryCode': instance.countryCode,
-    };
diff --git a/packages/in_app_purchase/in_app_purchase_ios/lib/src/store_kit_wrappers/sk_storefront_wrapper.dart b/packages/in_app_purchase/in_app_purchase_ios/lib/src/store_kit_wrappers/sk_storefront_wrapper.dart
index 934fdea..bcdae32 100644
--- a/packages/in_app_purchase/in_app_purchase_ios/lib/src/store_kit_wrappers/sk_storefront_wrapper.dart
+++ b/packages/in_app_purchase/in_app_purchase_ios/lib/src/store_kit_wrappers/sk_storefront_wrapper.dart
@@ -12,7 +12,7 @@
 ///
 /// Dart wrapper around StoreKit's
 /// [SKStorefront](https://developer.apple.com/documentation/storekit/skstorefront?language=objc).
-@JsonSerializable()
+@JsonSerializable(createToJson: true)
 class SKStorefrontWrapper {
   /// Creates a new [SKStorefrontWrapper] with the provided information.
   SKStorefrontWrapper({
diff --git a/packages/in_app_purchase/in_app_purchase_ios/pubspec.yaml b/packages/in_app_purchase/in_app_purchase_ios/pubspec.yaml
index fdd769e..b40ad1d 100644
--- a/packages/in_app_purchase/in_app_purchase_ios/pubspec.yaml
+++ b/packages/in_app_purchase/in_app_purchase_ios/pubspec.yaml
@@ -2,7 +2,7 @@
 description: An implementation for the iOS platform of the Flutter `in_app_purchase` plugin. This uses the iOS StoreKit Framework.
 repository: https://github.com/flutter/plugins/tree/master/packages/in_app_purchase/in_app_purchase_ios
 issue_tracker: https://github.com/flutter/flutter/issues?q=is%3Aissue+is%3Aopen+label%3A%22p%3A+in_app_purchase%22
-version: 0.1.3+5
+version: 0.1.4
 
 environment:
   sdk: ">=2.14.0 <3.0.0"
@@ -20,12 +20,12 @@
   flutter:
     sdk: flutter
   in_app_purchase_platform_interface: ^1.1.0
-  json_annotation: ^4.0.1
+  json_annotation: ^4.3.0
   meta: ^1.3.0
 
 dev_dependencies:
   build_runner: ^2.0.0
   flutter_test:
     sdk: flutter
-  json_serializable: ^5.0.2
+  json_serializable: ^6.0.0
   test: ^1.16.0