showDynamicQRCode method

Future<TinkoffResult> showDynamicQRCode({
  1. required AndroidDynamicQrCode androidDynamicQrCode,
  2. required IosDynamicQrCode iOSDynamicQrCode,
})

Отображает экран с одноразовым QR-кодом, отсканировав который, пользователь сможет провести оплату с помощью Системы быстрых платежей

При данном типе оплаты сумма и информация о платеже фиксируется, и SDK способен получить и обработать статус платежа

Implementation

Future<TinkoffResult> showDynamicQRCode({
  required AndroidDynamicQrCode androidDynamicQrCode,
  required IosDynamicQrCode iOSDynamicQrCode,
}) async {
  _checkActivated();
  final method = Method.showDynamicQrScreen;

  late final Map<String, dynamic> arguments;

  if (Platform.isIOS) {
    switch (iOSDynamicQrCode.runtimeType) {
      case IosDynamicQrCodeFullPaymentFlow:
        final code = iOSDynamicQrCode as IosDynamicQrCodeFullPaymentFlow;
        arguments = {
          method.orderOptions: code.orderOptions.arguments,
          method.customerOptions: code.customerOptions?.arguments,
          method.successUrl: code.successUrl,
          method.failureUrl: code.failureUrl,
          method.paymentData: code.paymentData,
          method.paymentFlow: PaymentFlow.full.name,
        };
        break;
      case IosDynamicQrCodeFinishPaymentFlow:
        final code = iOSDynamicQrCode as IosDynamicQrCodeFinishPaymentFlow;
        arguments = {
          method.paymentId: code.paymentId,
          method.amount: code.amount,
          method.orderId: code.orderId,
          method.customerOptions: code.customerOptions?.arguments,
          method.paymentFlow: PaymentFlow.finish.name,
        };
        break;
    }
  } else {
    arguments = {
      method.terminalKey: androidDynamicQrCode.terminalKey,
      method.publicKey: androidDynamicQrCode.publicKey,
      method.orderOptions: androidDynamicQrCode.orderOptions.arguments,
      method.customerOptions: androidDynamicQrCode.customerOptions.arguments,
      method.paymentId: androidDynamicQrCode.paymentId,
      method.featuresOptions: androidDynamicQrCode.featuresOptions?.arguments,
    };
  }

  return _channel
      .invokeMethod(
        method.name,
        arguments..removeWhere((key, value) => value == null),
      )
      .then(parseTinkoffResult);
}