fix: getWlptr failing nullcheck in hardware monero wallets (#2149)

now null wptr on listener calls will be handled gracefully Co-authored-by: Omar Hatem <omarh.ismail1@gmail.com>

cyan committed Apr 3, 2025 at 03:34 UTC 7a5999d90ef798e41c4eb146e4a7351979ecc6e0
2 files changed +10 -6
cw_monero/lib/api/account_list.dart
+2 -1
@@ -7,7 +7,8 @@ bool get isViewOnly => int.tryParse(monero.Wallet_secretSpendKey(wptr!)) == 0;
7 int _wlptrForW = 0;
8 monero.WalletListener? _wlptr = null;
9
10 -monero.WalletListener getWlptr() {
10 +monero.WalletListener? getWlptr() {
11 + if (wptr == null) return null;
12 if (wptr!.address == _wlptrForW) return _wlptr!;
13 _wlptrForW = wptr!.address;
14 _wlptr = monero.MONERO_cw_getWalletListener(wptr!);
cw_monero/lib/api/wallet.dart
+8 -5
@@ -2,7 +2,6 @@ import 'dart:async';
2 import 'dart:ffi';
3 import 'dart:isolate';
4
5 -import 'package:cw_core/root_dir.dart';
5 import 'package:cw_core/utils/print_verbose.dart';
6 import 'package:cw_monero/api/account_list.dart';
7 import 'package:cw_monero/api/exceptions/setup_wallet_exception.dart';
@@ -22,14 +21,18 @@ int getSyncingHeight() {
21 }
22
23 bool isNeededToRefresh() {
25 - final ret = monero.MONERO_cw_WalletListener_isNeedToRefresh(getWlptr());
26 - monero.MONERO_cw_WalletListener_resetNeedToRefresh(getWlptr());
24 + final wlptr = getWlptr();
25 + if (wlptr == null) return false;
26 + final ret = monero.MONERO_cw_WalletListener_isNeedToRefresh(wlptr);
27 + monero.MONERO_cw_WalletListener_resetNeedToRefresh(wlptr);
28 return ret;
29 }
30
31 bool isNewTransactionExist() {
31 - final ret = monero.MONERO_cw_WalletListener_isNewTransactionExist(getWlptr());
32 - monero.MONERO_cw_WalletListener_resetIsNewTransactionExist(getWlptr());
32 + final wlptr = getWlptr();
33 + if (wlptr == null) return false;
34 + final ret = monero.MONERO_cw_WalletListener_isNewTransactionExist(wlptr);
35 + monero.MONERO_cw_WalletListener_resetIsNewTransactionExist(wlptr);
36 return ret;
37 }
38