pay method

Initiates a UPI payment using system app chooser.

Implementation

@override
Future<UpiPaymentResult> pay(UpiPaymentRequest request) async {
  request.validate();
  final paymentUri = UpiUriBuilder.buildPaymentUri(request);

  try {
    final rawResponse = await methodChannel.invokeMethod<String>('pay', {
      'uri': paymentUri.toString(),
      'request': request.toMap(),
    });
    return UpiResponseParser.parseResponse(rawResponse, rawUri: paymentUri);
  } on PlatformException catch (e) {
    if (e.code == 'USER_CANCELLED') {
      return UpiPaymentResult(
        status: UpiPaymentStatus.cancelled,
        message: e.message ?? 'User cancelled payment.',
        rawResponse: e.details?.toString(),
        rawUri: paymentUri,
      );
    }
    throw UpiException(
      code: _mapErrorCode(e.code),
      message: e.message ?? 'Payment initiation failed.',
      details: e.details,
    );
  }
}