handleObserverCallbacks method

  1. @visibleForTesting
Future handleObserverCallbacks(
  1. MethodCall call
)

Triage a method channel call from the platform and triggers the correct observer method.

This method is public for testing purposes only and should not be used outside this class.

Implementation

@visibleForTesting
Future<dynamic> handleObserverCallbacks(MethodCall call) async {
  assert(_observer != null,
      '[in_app_purchase]: (Fatal)The observer has not been set but we received a purchase transaction notification. Please ensure the observer has been set using `setTransactionObserver`. Make sure the observer is added right at the App Launch.');
  final SKTransactionObserverWrapper observer = _observer!;
  switch (call.method) {
    case 'updatedTransactions':
      {
        final List<SKPaymentTransactionWrapper> transactions =
            _getTransactionList(call.arguments as List<dynamic>);
        return Future<void>(() {
          observer.updatedTransactions(transactions: transactions);
        });
      }
    case 'removedTransactions':
      {
        final List<SKPaymentTransactionWrapper> transactions =
            _getTransactionList(call.arguments as List<dynamic>);
        return Future<void>(() {
          observer.removedTransactions(transactions: transactions);
        });
      }
    case 'restoreCompletedTransactionsFailed':
      {
        final SKError error = SKError.fromJson(Map<String, dynamic>.from(
            call.arguments as Map<dynamic, dynamic>));
        return Future<void>(() {
          observer.restoreCompletedTransactionsFailed(error: error);
        });
      }
    case 'paymentQueueRestoreCompletedTransactionsFinished':
      {
        return Future<void>(() {
          observer.paymentQueueRestoreCompletedTransactionsFinished();
        });
      }
    case 'shouldAddStorePayment':
      {
        final Map<Object?, Object?> arguments =
            call.arguments as Map<Object?, Object?>;
        final SKPaymentWrapper payment = SKPaymentWrapper.fromJson(
            (arguments['payment']! as Map<dynamic, dynamic>)
                .cast<String, dynamic>());
        final SKProductWrapper product = SKProductWrapper.fromJson(
            (arguments['product']! as Map<dynamic, dynamic>)
                .cast<String, dynamic>());
        return Future<void>(() {
          if (observer.shouldAddStorePayment(
              payment: payment, product: product)) {
            SKPaymentQueueWrapper().addPayment(payment);
          }
        });
      }
    default:
      break;
  }
  throw PlatformException(
      code: 'no_such_callback',
      message: 'Did not recognize the observer callback ${call.method}.');
}