refactor: Enhance currency matching logic for address book and fix overlap for eth and base. (#2883)
David Adegoke committed
Feb 10, 2026 at 15:56 UTC
fbf121f3f20938c2f12586740857fcf0eb6665eb
1 file changed
+25
-6
lib/view_model/contact_list/contact_list_view_model.dart
+25
-6
@@ -6,13 +6,13 @@ import 'package:cake_wallet/entities/contact_base.dart';
6
import 'package:cake_wallet/entities/contact_record.dart';
7
import 'package:cake_wallet/entities/wallet_contact.dart';
8
import 'package:cake_wallet/entities/wallet_list_order_types.dart';
9
-import 'package:cake_wallet/generated/i18n.dart';
9
import 'package:cake_wallet/evm/evm.dart';
10
+import 'package:cake_wallet/generated/i18n.dart';
11
import 'package:cake_wallet/reactions/wallet_connect.dart';
12
import 'package:cake_wallet/store/settings_store.dart';
13
import 'package:cake_wallet/utils/mobx.dart';
14
+import 'package:cake_wallet/utils/token_utilities.dart';
15
import 'package:cw_core/crypto_currency.dart';
15
-import 'package:cw_core/erc20_token.dart';
16
import 'package:cw_core/currency_for_wallet_type.dart';
17
import 'package:cw_core/wallet_info.dart';
18
import 'package:cw_core/wallet_type.dart';
@@ -150,10 +150,29 @@ abstract class ContactListViewModelBase with Store {
150
isWalletContact &&
151
(element.type == CryptoCurrency.btc || element.type == CryptoCurrency.ltc)) return false;
152
153
- return element.type == _currency ||
154
- (element.type.tag != null && _currency.tag != null && element.type.tag == _currency.tag) ||
155
- _currency.toString() == element.type.tag ||
156
- _currency.tag == element.type.toString();
153
+ final currencyMatches = element.type == _currency;
154
+
155
+ final tagsMatch =
156
+ element.type.tag != null && _currency.tag != null && element.type.tag == _currency.tag;
157
+
158
+ final tagMatchesTitle = _currency.tag != null && _currency.tag == element.type.title;
159
+
160
+ final titleMatchesTag = _currency.title == element.type.tag;
161
+
162
+ var matches = currencyMatches || tagsMatch || tagMatchesTitle || titleMatchesTag;
163
+
164
+ if (matches && isWalletContact && element is WalletContact && element.walletType != null) {
165
+ final walletType = element.walletType!;
166
+
167
+ if (isEVMCompatibleChain(walletType)) {
168
+ final currencyChainId = TokenUtilities.getChainId(_currency);
169
+ final walletChainId = evm!.getChainIdByWalletType(walletType);
170
+
171
+ if (currencyChainId != walletChainId) matches = false;
172
+ }
173
+ }
174
+
175
+ return matches;
176
}
177
178
void dispose() => _subscription?.cancel();