open method

Future<Map> open(
  1. BuildContext context,
  2. Map options
)

Opens Razorpay checkout in a WebView dialog

Implementation

Future<Map<dynamic, dynamic>> open(
  BuildContext context,
  Map<dynamic, dynamic> options,
) async {
  final completer = Completer<Map<dynamic, dynamic>>();

  try {
    await showDialog(
      context: context,
      barrierDismissible: false,
      builder: (dialogContext) {
        return _RazorpayWebViewDialog(
          options: options,
          onResult: (result) {
            if (Navigator.of(dialogContext).canPop()) {
              Navigator.of(dialogContext).pop();
            }
            if (!completer.isCompleted) {
              completer.complete(result);
            }
          },
          onDismiss: () {
            if (Navigator.of(dialogContext).canPop()) {
              Navigator.of(dialogContext).pop();
            }
            if (!completer.isCompleted) {
              completer.complete({
                'type': ResponseCodes.CODE_PAYMENT_ERROR,
                'data': {
                  'code': ResponseCodes.PAYMENT_CANCELLED,
                  'message': 'Payment processing cancelled by user',
                },
              });
            }
          },
        );
      },
    );
  } catch (e) {
    // Handle any errors during dialog display
    if (!completer.isCompleted) {
      completer.complete({
        'type': ResponseCodes.CODE_PAYMENT_ERROR,
        'data': {
          'code': ResponseCodes.UNKNOWN_ERROR,
          'message': 'Failed to open payment dialog: $e',
        },
      });
    }
  }

  return completer.future;
}