downgradeOrUpgrade method

Future<void> downgradeOrUpgrade({
  1. required BuildContext context,
  2. required ProductDetails newProduct,
  3. required List<PurchaseDetails> currentPurchases,
  4. required String oldProductId,
})

Implementation

Future<void> downgradeOrUpgrade({required BuildContext context,
  required ProductDetails newProduct,
  required List<PurchaseDetails> currentPurchases,
  required String oldProductId}) async {
  try {
    if (Platform.isAndroid) {
      final GooglePlayPurchaseDetails? oldPurchase = _getOldSubscription(
          currentPurchases, oldProductId);
      final GooglePlayPurchaseParam purchaseParam = GooglePlayPurchaseParam(
        productDetails: newProduct,
        changeSubscriptionParam: oldPurchase != null
            ? ChangeSubscriptionParam(
          oldPurchaseDetails: oldPurchase,
          replacementMode: ReplacementMode.chargeFullPrice,
        )
            : null,
      );
      await inAppPurchase.buyNonConsumable(
        purchaseParam: purchaseParam,
      );
    } else {
      final purchaseParam = PurchaseParam(productDetails: newProduct);
      await inAppPurchase.buyNonConsumable(
        purchaseParam: purchaseParam,
      );
    }
  } on PlatformException catch (e) {
    if (e.toString().contains('storekit_duplicate_product_object')) {
      AppLogs.showErrorLogs("Purchase issue: $e");
    } else {
      AppLogs.showErrorLogs("Purchase issue: $e");
    }
    AppLogs.showErrorLogs("Purchase issue: $e");
  }
}