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();