createCheckout method

Creates a checkout without allowing the backend to navigate the page.

Implementation

@override
Future<InappifySdkResult<InappifyCheckoutResult>> createCheckout(
  InappifyPurchaseRequest request,
) async {
  final cancelled = _preCancelled<InappifyCheckoutResult>(
    'createCheckout',
    request.cancellation,
  );
  if (cancelled != null) return cancelled;
  final packageIdentifier = _resolvePackageIdentifier(request);
  if (packageIdentifier == null) {
    return _invalid<InappifyCheckoutResult>(
      'createCheckout',
      'A packageIdentifier could not be inferred unambiguously.',
    );
  }
  if (_hasUnsupportedNativePurchaseOptions(request)) {
    return _invalid<InappifyCheckoutResult>(
      'createCheckout',
      'Native-store purchase options are not supported by Web checkout.',
    );
  }
  return _run<InappifyCheckoutResult>(
    'createCheckout',
    action: () async {
      final raw = await _bridge.call(
        'createCheckout',
        positionalArguments: <Object?>[
          _checkoutParameters(request, packageIdentifier),
          if (request.cancellation != null) const <String, Object?>{},
        ],
        cancellation: request.cancellation,
        injectAbortSignal: request.cancellation != null,
      );
      final checkout = InappifyWebPayloadCodec.checkout(raw);
      _recordCheckoutState(checkout);
      return checkout;
    },
    cancellation: request.cancellation,
    mutationMayHaveCommitted: true,
  );
}