listenToPurchaseUpdated function

dynamic listenToPurchaseUpdated(
  1. List<PurchaseDetails> purchaseDetailsList,
  2. Store store
)

Implementation

listenToPurchaseUpdated(
    List<PurchaseDetails> purchaseDetailsList, Store store) {
  final VirtualPumaPayState state = store.state;

  final storeName = Platform.isAndroid ? "android" : "ios";

  print(
      "🔔 listenToPurchaseUpdated called with ${purchaseDetailsList.length} items");

  purchaseDetailsList.forEach((PurchaseDetails item) async {
    final _purchaseDetail = item.toPurchaseDetailEntity();

    if (item.status == PurchaseStatus.pending) {
      store.dispatch(SetPurchasePendingAction(purchasePending: true));
    } else {
      store.dispatch(SetPurchasePendingAction(purchasePending: false));
      final receipt = AppStoreReceiptData(
          item.verificationData.localVerificationData,
          state.pumaPayState.appleAppStorePassword!,
          true);

      if (item.status == PurchaseStatus.error) {
        print("🚨 Found item with error status: ${item.toString()}");
        InAppPurchase.instance.completePurchase(item);
      } else if ((item.status == PurchaseStatus.purchased) ||
          item.status == PurchaseStatus.restored) {
        store.dispatch(VerifyInAppPurchaseAction(
            receipt: receipt.toJson(),
            productID: item.productID,
            storeName: storeName,
            purchaseDetail: _purchaseDetail));
      }

      if (item.pendingCompletePurchase) {
        await InAppPurchase.instance.completePurchase(item);
      } else {
        InAppPurchase.instance.completePurchase(item);
      }
    }
  });
}