88 *
99 */
1010
11+ import 'dart:async' ;
12+
1113import 'package:flutter/material.dart' ;
1214import 'package:flutter_riverpod/flutter_riverpod.dart' ;
1315import 'package:flutter_svg/svg.dart' ;
1416import 'package:isar_community/isar.dart' ;
1517
1618import '../../app_config.dart' ;
1719import '../../models/add_wallet_list_entity/sub_classes/coin_entity.dart' ;
18- import '../../models/isar/models/ethereum/eth_contract.dart' ;
20+ import '../../models/isar/models/contract.dart' ;
21+ import '../../pages_desktop_specific/my_stack_view/dialogs/desktop_expanding_solana_wallet_card.dart' ;
1922import '../../pages_desktop_specific/my_stack_view/dialogs/desktop_expanding_wallet_card.dart' ;
2023import '../../providers/providers.dart' ;
2124import '../../services/event_bus/events/wallet_added_event.dart' ;
2225import '../../services/event_bus/global_event_bus.dart' ;
2326import '../../themes/stack_colors.dart' ;
2427import '../../utilities/assets.dart' ;
2528import '../../utilities/constants.dart' ;
29+ import '../../utilities/default_spl_tokens.dart' ;
2630import '../../utilities/text_styles.dart' ;
2731import '../../utilities/util.dart' ;
2832import '../../wallets/crypto_currency/crypto_currency.dart' ;
@@ -59,7 +63,7 @@ class WalletsOverview extends ConsumerStatefulWidget {
5963 ConsumerState <WalletsOverview > createState () => _EthWalletsOverviewState ();
6064}
6165
62- typedef WalletListItemData = ({Wallet wallet, List <EthContract > contracts});
66+ typedef WalletListItemData = ({Wallet wallet, List <Contract > contracts});
6367
6468class _EthWalletsOverviewState extends ConsumerState <WalletsOverview > {
6569 final isDesktop = Util .isDesktop;
@@ -99,15 +103,13 @@ class _EthWalletsOverviewState extends ConsumerState<WalletsOverview> {
99103 term,
100104 );
101105
102- final List <EthContract > contracts = [];
106+ final List <Contract > contracts = [];
103107
104108 for (final contract in entry.value.contracts) {
105109 if (_elementContains (contract.name, term)) {
106110 contracts.add (contract);
107111 } else if (_elementContains (contract.symbol, term)) {
108112 contracts.add (contract);
109- } else if (_elementContains (contract.type.name, term)) {
110- contracts.add (contract);
111113 } else if (_elementContains (contract.address, term)) {
112114 contracts.add (contract);
113115 }
@@ -133,7 +135,7 @@ class _EthWalletsOverviewState extends ConsumerState<WalletsOverview> {
133135
134136 if (widget.coin is Ethereum ) {
135137 for (final data in walletsData) {
136- final List <EthContract > contracts = [];
138+ final List <Contract > contracts = [];
137139 final contractAddresses = ref.read (
138140 pWalletTokenAddresses (data.walletId),
139141 );
@@ -150,6 +152,51 @@ class _EthWalletsOverviewState extends ConsumerState<WalletsOverview> {
150152 }
151153 }
152154
155+ // add tuple to list
156+ wallets[data.walletId] = (
157+ wallet: ref.read (pWallets).getWallet (data.walletId),
158+ contracts: contracts,
159+ );
160+ }
161+ } else if (widget.coin is Solana ) {
162+ // Ensure default Solana tokens are loaded into database.
163+ final dbProvider = ref.read (mainDBProvider);
164+ for (final defaultToken in DefaultSplTokens .list) {
165+ final existingToken = dbProvider.getSplTokenSync (defaultToken.address);
166+ if (existingToken == null ) {
167+ // Token not in database, add it asynchronously.
168+ unawaited (dbProvider.putSplToken (defaultToken));
169+ }
170+ }
171+
172+ for (final data in walletsData) {
173+ final List <Contract > contracts = [];
174+ final tokenMintAddresses = ref.read (
175+ pWalletTokenAddresses (data.walletId),
176+ );
177+
178+ // fetch each token
179+ for (final tokenAddress in tokenMintAddresses) {
180+ final token = dbProvider.getSplTokenSync (tokenAddress);
181+
182+ // add it to list if it exists in DB or in default tokens
183+ if (token != null ) {
184+ contracts.add (token);
185+ } else {
186+ // Try to find in default tokens.
187+ try {
188+ final defaultToken = DefaultSplTokens .list.firstWhere (
189+ (t) => t.address == tokenAddress,
190+ );
191+ contracts.add (defaultToken);
192+ } catch (_) {
193+ // Token not found anywhere.
194+ //
195+ // Might want to throw here or something.
196+ }
197+ }
198+ }
199+
153200 // add tuple to list
154201 wallets[data.walletId] = (
155202 wallet: ref.read (pWallets).getWallet (data.walletId),
@@ -319,13 +366,23 @@ class _EthWalletsOverviewState extends ConsumerState<WalletsOverview> {
319366
320367 if (wallet.cryptoCurrency.hasTokenSupport) {
321368 if (isDesktop) {
322- return DesktopExpandingWalletCard (
323- key: Key (
324- "${wallet .walletId }_${entry .contracts .map ((e ) => e .address ).join ()}" ,
325- ),
326- data: entry,
327- navigatorState: widget.navigatorState! ,
328- );
369+ if (wallet.cryptoCurrency is Solana ) {
370+ return DesktopExpandingSolanaWalletCard (
371+ key: Key (
372+ "${wallet .walletId }_${entry .contracts .map ((e ) => e .address ).join ()}" ,
373+ ),
374+ data: entry,
375+ navigatorState: widget.navigatorState! ,
376+ );
377+ } else {
378+ return DesktopExpandingWalletCard (
379+ key: Key (
380+ "${wallet .walletId }_${entry .contracts .map ((e ) => e .address ).join ()}" ,
381+ ),
382+ data: entry,
383+ navigatorState: widget.navigatorState! ,
384+ );
385+ }
329386 } else {
330387 return MasterWalletCard (
331388 key: Key (wallet.walletId),
0 commit comments