fix: add OpenCryptoPay request handling to SendViewModel (#3105)

Konstantin Ullrich committed Mar 18, 2026 at 14:55 UTC 183e2bed942bd67af225f4079ce52bf41cc48a06
2 files changed +30 -2
lib/new-ui/pages/send_page.dart
+3 -2
@@ -62,7 +62,6 @@ import 'package:cw_core/unspent_coin_type.dart';
62 import 'package:flutter/cupertino.dart';
63 import 'package:flutter/material.dart';
64 import 'package:flutter_mobx/flutter_mobx.dart';
65 -import 'package:flutter_svg/svg.dart';
65 import 'package:mobx/mobx.dart';
66 import 'package:modal_bottom_sheet/modal_bottom_sheet.dart';
67
@@ -838,7 +837,9 @@ class _NewSendPageState extends State<NewSendPage> {
837
838 if (OpenCryptoPayService.isOpenCryptoPayQR(uri) &&
839 widget.sendViewModel.selectedCryptoCurrency != CryptoCurrency.btcln) {
841 - widget.sendViewModel.createOpenCryptoPayTransaction(uri);
840 + final request = await widget.sendViewModel.getOpenCryptoPayRequest(uri);
841 + if (request == null) return;
842 + _applyPaymentRequest(request);
843 return;
844 }
845
lib/view_model/send/send_view_model.dart
+27
@@ -529,6 +529,33 @@ abstract class SendViewModelBase extends WalletChangeListenerViewModel with Stor
529 }
530 }
531
532 + @action
533 + Future<PaymentRequest?> getOpenCryptoPayRequest(String uri) async {
534 + try {
535 + final originalOCPRequest = await _ocpService.getOpenCryptoPayInvoice(uri.toString());
536 + final paymentUri = await _ocpService.getOpenCryptoPayAddress(
537 + originalOCPRequest,
538 + selectedCryptoCurrency,
539 + );
540 +
541 + ocpRequest = originalOCPRequest;
542 +
543 + clearOutputs();
544 + return PaymentRequest.fromUri(paymentUri);
545 + } on OpenCryptoPayNotSupportedException catch (e) {
546 + printV(e.message);
547 + if (walletType == WalletType.bitcoin) {
548 + state = InitialExecutionState();
549 + } else {
550 + state = FailureState(translateErrorMessage(e, walletType, currency));
551 + }
552 + } catch (e) {
553 + printV(e);
554 + state = FailureState(translateErrorMessage(e, walletType, currency));
555 + }
556 + return null;
557 + }
558 +
559 @action
560 Future<PendingTransaction?> createOpenCryptoPayTransaction(String uri) async {
561 state = IsExecutingState();