open method
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;
}