diff --git a/lib/new-ui/pages/send_page.dart b/lib/new-ui/pages/send_page.dart index ca6ba4142..90ec32796 100644 --- a/lib/new-ui/pages/send_page.dart +++ b/lib/new-ui/pages/send_page.dart @@ -62,7 +62,6 @@ import 'package:cw_core/unspent_coin_type.dart'; import 'package:flutter/cupertino.dart'; import 'package:flutter/material.dart'; import 'package:flutter_mobx/flutter_mobx.dart'; -import 'package:flutter_svg/svg.dart'; import 'package:mobx/mobx.dart'; import 'package:modal_bottom_sheet/modal_bottom_sheet.dart'; @@ -838,7 +837,9 @@ class _NewSendPageState extends State { if (OpenCryptoPayService.isOpenCryptoPayQR(uri) && widget.sendViewModel.selectedCryptoCurrency != CryptoCurrency.btcln) { - widget.sendViewModel.createOpenCryptoPayTransaction(uri); + final request = await widget.sendViewModel.getOpenCryptoPayRequest(uri); + if (request == null) return; + _applyPaymentRequest(request); return; } diff --git a/lib/view_model/send/send_view_model.dart b/lib/view_model/send/send_view_model.dart index 66242a5ea..1c39e57eb 100644 --- a/lib/view_model/send/send_view_model.dart +++ b/lib/view_model/send/send_view_model.dart @@ -529,6 +529,33 @@ abstract class SendViewModelBase extends WalletChangeListenerViewModel with Stor } } + @action + Future getOpenCryptoPayRequest(String uri) async { + try { + final originalOCPRequest = await _ocpService.getOpenCryptoPayInvoice(uri.toString()); + final paymentUri = await _ocpService.getOpenCryptoPayAddress( + originalOCPRequest, + selectedCryptoCurrency, + ); + + ocpRequest = originalOCPRequest; + + clearOutputs(); + return PaymentRequest.fromUri(paymentUri); + } on OpenCryptoPayNotSupportedException catch (e) { + printV(e.message); + if (walletType == WalletType.bitcoin) { + state = InitialExecutionState(); + } else { + state = FailureState(translateErrorMessage(e, walletType, currency)); + } + } catch (e) { + printV(e); + state = FailureState(translateErrorMessage(e, walletType, currency)); + } + return null; + } + @action Future createOpenCryptoPayTransaction(String uri) async { state = IsExecutingState();