createPaymentWithWidget method

Future<void> createPaymentWithWidget({
  1. required BuildContext context,
  2. required PayOrcPaymentRequest request,
  3. required dynamic errorResult(
    1. String? message
    ),
  4. required dynamic onPopResult(
    1. String? message
    ),
})

To create payment with widget

Implementation

Future<void> createPaymentWithWidget(
    {required BuildContext context,
    required PayOrcPaymentRequest request,
    required Function(String? message) errorResult,
    required Function(String? pOrderId) onPopResult}) async {
  try {
    await clearData();
    if (context.mounted) {
      _showProgressDialog(context);
    }
    if (configMemoryHolder.payOrcKeysValid?.status == PayOrcStatus.success) {
      final response = await _client.createPayment(request);
      configMemoryHolder.payOrcPaymentResponse = response;
      final paymentUrl = configMemoryHolder.payOrcPaymentResponse?.iframeLink;
      if (context.mounted) {
        _hideProgressDialog(context);
        // Add a slight delay before pushing the new page
        Future.delayed(Duration(milliseconds: 200), () {
          if (context.mounted) {
            Navigator.of(context).push(MaterialPageRoute(
              builder: (context) => PayOrcWebView(
                paymentUrl: paymentUrl!,
                onPopResult: onPopResult,
              ),
            ));
          }
        });
      }
    } else {
      final merchantKey = await preferenceHelper.getMerchantKey();
      final merchantSecret = await preferenceHelper.getMerchantSecret();

      final validate = await _client.validateMerchantKeys(PayOrcKeysRequest(
          merchantKey: merchantKey,
          merchantSecret: merchantSecret,
          env: configMemoryHolder.environment));

      if (validate.status == PayOrcStatus.success) {
        final response = await _client.createPayment(request);
        configMemoryHolder.payOrcPaymentResponse = response;
        final paymentUrl =
            configMemoryHolder.payOrcPaymentResponse?.iframeLink;
        if (context.mounted) {
          _hideProgressDialog(context);

          // Add a slight delay before pushing the new page
          Future.delayed(Duration(milliseconds: 200), () {
            if (context.mounted) {
              Navigator.of(context).push(MaterialPageRoute(
                builder: (context) => PayOrcWebView(
                  paymentUrl: paymentUrl!,
                  onPopResult: onPopResult,
                ),
              ));
            }
          });
        }
      } else {
        if (context.mounted) {
          _hideProgressDialog(context);
        }
        configMemoryHolder.payOrcKeysValid = null;
        errorResult.call(validate.message ?? "Merchant key / secret invalid");
        return;
      }
    }
  } on HttpException catch (e) {
    if (e.uri?.path.contains(ApiPaths.URL_CHECK_KEYS) == true) {
      configMemoryHolder.payOrcKeysValid = null;
    }
    if (context.mounted) {
      _hideProgressDialog(context);
    }
    errorResult.call(e.message);
  } finally {
    if (context.mounted) {
      _hideProgressDialog(context);
    }
  }
}