make walletconnect work from the scan button

Robert Malikowski committed Mar 27, 2026 at 00:56 UTC b6f614fdbc55bcea92563f6874701b21c3d7f3d1
4 files changed +38 -8
ios/Podfile.lock
+2 -2
@@ -1,7 +1,7 @@
1 PODS:
2 - bitbox_flutter (0.0.1):
3 - Flutter
4 - - breez_sdk_spark_flutter (0.9.1):
4 + - breez_sdk_spark_flutter (0.11.0):
5 - Flutter
6 - connectivity_plus (0.0.1):
7 - Flutter
@@ -303,7 +303,7 @@ EXTERNAL SOURCES:
303
304 SPEC CHECKSUMS:
305 bitbox_flutter: 506f80b961ddf646b0d80cef9f6eadaab96d91b0
306 - breez_sdk_spark_flutter: e96b24d1c0ca1ef7dec122dd7bbf63eb921f97f4
306 + breez_sdk_spark_flutter: e7d0201b7001ff16f85a7c4820592db5728d4c27
307 connectivity_plus: 2a701ffec2c0ae28a48cf7540e279787e77c447d
308 CryptoSwift: e64e11850ede528a02a0f3e768cec8e9d92ecb90
309 cw_decred: 9c0e1df74745b51a1289ec5e91fb9e24b68fa14a
lib/new-ui/pages/home_page.dart
+9 -5
@@ -159,11 +159,15 @@ class _NewHomePageState extends State<NewHomePage> {
159 builder: (_) {
160 return Column(
161 children: [
162 - CoinActionRow(
163 - lightningMode: _lightningMode,
164 - showSwap: widget.dashboardViewModel.isEnabledSwapAction,),
165 - MwebAd(dashboardViewModel: widget.dashboardViewModel,),
166 - ],
162 + CoinActionRow(
163 + lightningMode: _lightningMode,
164 + showSwap: widget.dashboardViewModel.isEnabledSwapAction,
165 + walletType: widget.dashboardViewModel.wallet.type,
166 + ),
167 + MwebAd(
168 + dashboardViewModel: widget.dashboardViewModel,
169 + ),
170 + ],
171 );
172 },
173 ),
lib/new-ui/widgets/coins_page/action_row/coin_action_row.dart
+21 -1
@@ -6,15 +6,19 @@ import 'package:cake_wallet/generated/i18n.dart';
6 import 'package:cake_wallet/new-ui/modal_navigator.dart';
7 import 'package:cake_wallet/new-ui/pages/send_page.dart';
8 import 'package:cake_wallet/new-ui/pages/swap_page.dart';
9 +import 'package:cake_wallet/reactions/wallet_connect.dart';
10 import 'package:cake_wallet/routes.dart';
11 +import 'package:cake_wallet/src/widgets/alert_with_one_action.dart';
12 import 'package:cake_wallet/src/widgets/cake_image_widget.dart';
13 import 'package:cake_wallet/utils/feature_flag.dart';
14 import 'package:cake_wallet/utils/payment_request.dart';
15 +import 'package:cake_wallet/utils/show_pop_up.dart';
16 import 'package:cake_wallet/view_model/send/send_view_model.dart';
17 import 'package:cake_wallet/view_model/wallet_address_list/wallet_address_list_view_model.dart';
18 import 'package:cw_core/crypto_currency.dart';
19 import 'package:cw_core/lnurl.dart';
20 import 'package:cw_core/unspent_coin_type.dart';
21 +import 'package:cw_core/wallet_type.dart';
22 import 'package:flutter/material.dart';
23 import 'package:flutter_svg/svg.dart';
24 import 'package:modal_bottom_sheet/modal_bottom_sheet.dart';
@@ -24,10 +28,11 @@ import '../../../pages/scan_page.dart';
28 import 'coin_action_button.dart';
29
30 class CoinActionRow extends StatelessWidget {
27 - const CoinActionRow({super.key, this.lightningMode = false, this.showSwap = true});
31 + const CoinActionRow({super.key, this.lightningMode = false, this.showSwap = true, required this.walletType});
32
33 final bool lightningMode;
34 final bool showSwap;
35 + final WalletType walletType;
36
37 @override
38 Widget build(BuildContext context) {
@@ -178,6 +183,21 @@ class CoinActionRow extends StatelessWidget {
183 req = PaymentRequest(code, amount, "", "", "");
184 } else if (OpenCryptoPayService.isOpenCryptoPayQR(code)) {
185 req = PaymentRequest(code, "", "", "", "");
186 + } else if (Uri.tryParse(code)?.scheme == "wc") {
187 + if (!isEVMCompatibleChain(walletType)) {
188 + showPopUp<void>(
189 + context: context,
190 + builder: (context) => AlertWithOneAction(
191 + alertTitle: "WalletConnect",
192 + alertContent: S.of(context).switchToEVMCompatibleWallet,
193 + buttonText: "OK",
194 + buttonAction: Navigator.of(context).pop));
195 + return;
196 + }
197 +
198 + Navigator.of(context)
199 + .pushNamed(Routes.walletConnectConnectionsListing, arguments: Uri.parse(code));
200 + return;
201 } else {
202 final uri = Uri.tryParse(code);
203 if (uri == null) return;
lib/src/screens/wallet_connect/wc_connections_listing_view.dart
+6
@@ -12,6 +12,7 @@ import 'package:cake_wallet/entities/qr_scanner.dart';
12 import 'package:cake_wallet/src/widgets/primary_button.dart';
13 import 'package:cake_wallet/utils/show_pop_up.dart';
14 import 'package:cake_wallet/utils/permission_handler.dart';
15 +import 'package:url_launcher/url_launcher.dart';
16
17 import 'widgets/wc_pairing_item_widget.dart';
18 import 'wc_pairing_detail_page.dart';
@@ -27,6 +28,11 @@ class WalletConnectConnectionsView extends StatelessWidget {
28 void _triggerPairingFromDeeplink(Uri? launchUri) async {
29 if (launchUri == null) return;
30
31 + if(launchUri.scheme == "wc") {
32 + await walletKitService.pairWithUri(launchUri);
33 + return;
34 + }
35 +
36 final actualLinkList = launchUri.query.split("uri=");
37
38 if (actualLinkList.length <= 1) return;