Skip to content

Commit 5d6a0ca

Browse files
committed
various
1 parent 94cac10 commit 5d6a0ca

File tree

4 files changed

+56
-76
lines changed

4 files changed

+56
-76
lines changed

lib/pages/token_view/sol_token_view.dart

Lines changed: 7 additions & 14 deletions
Original file line numberDiff line numberDiff line change
@@ -12,6 +12,7 @@ import 'package:flutter/material.dart';
1212
import 'package:flutter_riverpod/flutter_riverpod.dart';
1313
import 'package:flutter_svg/svg.dart';
1414

15+
import '../../models/isar/models/isar_models.dart';
1516
import '../../providers/db/main_db_provider.dart';
1617
import '../../providers/providers.dart';
1718
import '../../services/event_bus/events/global/wallet_sync_status_changed_event.dart';
@@ -63,7 +64,7 @@ class _SolTokenViewState extends ConsumerState<SolTokenView> {
6364
: WalletSyncStatus.synced;
6465

6566
// Initialize the Solana token wallet provider with mock data.
66-
//
67+
//
6768
// This sets up the pCurrentSolanaTokenWallet provider so that
6869
// SolanaTokenSummary can access the token wallet information.
6970
WidgetsBinding.instance.addPostFrameCallback((_) {
@@ -76,15 +77,15 @@ class _SolTokenViewState extends ConsumerState<SolTokenView> {
7677
}
7778

7879
/// Initialize the Solana token wallet for this token view.
79-
///
80+
///
8081
/// Creates a SolanaTokenWallet with token data from DefaultSplTokens or the database.
8182
/// First looks in DefaultSplTokens, then checks the database for custom tokens.
8283
/// Sets it as the current token wallet in the provider so that UI widgets can access it.
83-
///
84+
///
8485
/// If the token is not found anywhere, sets the token wallet to null
8586
/// so the UI can display an error message.
8687
void _initializeSolanaTokenWallet() {
87-
dynamic tokenInfo;
88+
SplToken? tokenInfo;
8889

8990
// First try to find in default tokens.
9091
try {
@@ -119,19 +120,11 @@ class _SolTokenViewState extends ConsumerState<SolTokenView> {
119120

120121
if (parentWallet == null) {
121122
ref.read(solanaTokenServiceStateProvider.state).state = null;
122-
debugPrint(
123-
'ERROR: Wallet is not a SolanaWallet: ${widget.walletId}',
124-
);
123+
debugPrint('ERROR: Wallet is not a SolanaWallet: ${widget.walletId}');
125124
return;
126125
}
127126

128-
final solanaTokenWallet = SolanaTokenWallet(
129-
parentSolanaWallet: parentWallet,
130-
tokenMint: widget.tokenMint,
131-
tokenName: "${tokenInfo.name}",
132-
tokenSymbol: "${tokenInfo.symbol}",
133-
tokenDecimals: tokenInfo.decimals as int,
134-
);
127+
final solanaTokenWallet = SolanaTokenWallet(parentWallet, tokenInfo);
135128

136129
ref.read(solanaTokenServiceStateProvider.state).state = solanaTokenWallet;
137130

lib/pages_desktop_specific/my_stack_view/wallet_view/desktop_sol_token_view.dart

Lines changed: 4 additions & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -12,6 +12,7 @@ import 'package:flutter/material.dart';
1212
import 'package:flutter_riverpod/flutter_riverpod.dart';
1313
import 'package:flutter_svg/svg.dart';
1414

15+
import '../../../models/isar/models/isar_models.dart';
1516
import '../../../pages/send_view/sub_widgets/transaction_fee_selection_sheet.dart';
1617
import '../../../pages/token_view/sub_widgets/token_transaction_list_widget_sol.dart';
1718
import '../../../providers/db/main_db_provider.dart';
@@ -84,7 +85,7 @@ class _DesktopTokenViewState extends ConsumerState<DesktopSolTokenView> {
8485
/// so the UI can display an error message.
8586
void _initializeSolanaTokenWallet() {
8687
// First try to find in default tokens
87-
dynamic tokenInfo;
88+
SplToken? tokenInfo;
8889
try {
8990
tokenInfo = DefaultSplTokens.list.firstWhere(
9091
(token) => token.address == widget.tokenMint,
@@ -117,19 +118,11 @@ class _DesktopTokenViewState extends ConsumerState<DesktopSolTokenView> {
117118

118119
if (parentWallet == null) {
119120
ref.read(solanaTokenServiceStateProvider.state).state = null;
120-
debugPrint(
121-
'ERROR: Wallet is not a SolanaWallet: ${widget.walletId}',
122-
);
121+
debugPrint('ERROR: Wallet is not a SolanaWallet: ${widget.walletId}');
123122
return;
124123
}
125124

126-
final solanaTokenWallet = SolanaTokenWallet(
127-
parentSolanaWallet: parentWallet,
128-
tokenMint: widget.tokenMint,
129-
tokenName: "${tokenInfo.name}",
130-
tokenSymbol: "${tokenInfo.symbol}",
131-
tokenDecimals: tokenInfo.decimals as int,
132-
);
125+
final solanaTokenWallet = SolanaTokenWallet(parentWallet, tokenInfo);
133126

134127
ref.read(solanaTokenServiceStateProvider.state).state = solanaTokenWallet;
135128

lib/pages_desktop_specific/my_stack_view/wallet_view/sub_widgets/desktop_wallet_summary.dart

Lines changed: 36 additions & 37 deletions
Original file line numberDiff line numberDiff line change
@@ -23,14 +23,17 @@ import '../../../../utilities/amount/amount.dart';
2323
import '../../../../utilities/amount/amount_formatter.dart';
2424
import '../../../../utilities/enums/wallet_balance_toggle_state.dart';
2525
import '../../../../utilities/text_styles.dart';
26+
import '../../../../wallets/crypto_currency/coins/ethereum.dart';
2627
import '../../../../wallets/crypto_currency/coins/firo.dart';
28+
import '../../../../wallets/crypto_currency/coins/solana.dart';
2729
import '../../../../wallets/crypto_currency/crypto_currency.dart'
2830
show CryptoCurrency;
2931
import '../../../../wallets/isar/providers/eth/current_token_wallet_provider.dart';
3032
import '../../../../wallets/isar/providers/eth/token_balance_provider.dart';
3133
import '../../../../wallets/isar/providers/solana/current_sol_token_wallet_provider.dart';
3234
import '../../../../wallets/isar/providers/solana/sol_token_balance_provider.dart';
3335
import '../../../../wallets/isar/providers/wallet_info_provider.dart';
36+
import '../../../../wallets/wallet/impl/sub_wallets/solana_token_wallet.dart';
3437
import 'desktop_balance_toggle_button.dart';
3538

3639
class DesktopWalletSummary extends ConsumerStatefulWidget {
@@ -81,42 +84,43 @@ class _WDesktopWalletSummaryState extends ConsumerState<DesktopWalletSummary> {
8184
);
8285

8386
// For Ethereum tokens, get the token contract; for Solana tokens, get the token wallet.
84-
dynamic tokenContract;
85-
dynamic solanaTokenWallet;
87+
final EthContract? tokenContract;
88+
final SolanaTokenWallet? solanaTokenWallet;
8689
if (widget.isToken) {
87-
try {
88-
tokenContract = ref.watch(
89-
pCurrentTokenWallet.select((value) => value!.tokenContract),
90-
);
91-
} catch (_) {
92-
// Ethereum token not found, check for Solana.
93-
tokenContract = null;
94-
}
90+
switch (ref.watch(pWalletCoin(walletId))) {
91+
case Ethereum():
92+
tokenContract = ref.watch(
93+
pCurrentTokenWallet.select((value) => value!.tokenContract),
94+
);
95+
solanaTokenWallet = null;
96+
break;
97+
98+
case Solana():
99+
tokenContract = null;
100+
// this cannot be null if coin is sol and isToken is true.
101+
// if it is null, then there is a bug somewhere else.
102+
solanaTokenWallet = ref.watch(pCurrentSolanaTokenWallet)!;
103+
break;
95104

96-
// Check for Solana token wallet if Ethereum token not found.
97-
if (tokenContract == null) {
98-
try {
99-
solanaTokenWallet = ref.watch(pCurrentSolanaTokenWallet);
100-
} catch (_) {
105+
default:
106+
tokenContract = null;
101107
solanaTokenWallet = null;
102-
}
103108
}
109+
} else {
110+
tokenContract = null;
111+
solanaTokenWallet = null;
104112
}
105113

106114
final price = widget.isToken && tokenContract != null
107115
? ref.watch(
108116
priceAnd24hChangeNotifierProvider.select(
109-
(value) => value.getTokenPrice(
110-
(tokenContract as dynamic).address as String,
111-
),
117+
(value) => value.getTokenPrice(tokenContract!.address),
112118
),
113119
)
114120
: widget.isToken && solanaTokenWallet != null
115121
? ref.watch(
116122
priceAnd24hChangeNotifierProvider.select(
117-
(value) => value.getTokenPrice(
118-
"${(solanaTokenWallet as dynamic).tokenMint}",
119-
),
123+
(value) => value.getTokenPrice(solanaTokenWallet!.tokenMint),
120124
),
121125
)
122126
: ref.watch(
@@ -149,15 +153,15 @@ class _WDesktopWalletSummaryState extends ConsumerState<DesktopWalletSummary> {
149153
balance = ref.watch(
150154
pTokenBalance((
151155
walletId: walletId,
152-
contractAddress: (tokenContract as dynamic).address as String,
156+
contractAddress: tokenContract.address,
153157
)),
154158
);
155159
} else if (widget.isToken && solanaTokenWallet != null) {
156160
// Watch Solana token balance from db.
157161
balance = ref.watch(
158162
pSolanaTokenBalance((
159163
walletId: walletId,
160-
tokenMint: (solanaTokenWallet as dynamic).tokenMint,
164+
tokenMint: solanaTokenWallet.tokenMint,
161165
)),
162166
);
163167
} else {
@@ -179,18 +183,13 @@ class _WDesktopWalletSummaryState extends ConsumerState<DesktopWalletSummary> {
179183
FittedBox(
180184
fit: BoxFit.scaleDown,
181185
child: SelectableText(
182-
widget.isToken && solanaTokenWallet != null
183-
? "${balanceToShow.decimal.toStringAsFixed(
184-
(solanaTokenWallet as dynamic).tokenDecimals as int,
185-
)} ${(solanaTokenWallet as dynamic).tokenSymbol}"
186-
: ref
187-
.watch(pAmountFormatter(coin))
188-
.format(
189-
balanceToShow,
190-
ethContract: tokenContract != null
191-
? tokenContract as EthContract?
192-
: null,
193-
),
186+
ref
187+
.watch(pAmountFormatter(coin))
188+
.format(
189+
balanceToShow,
190+
ethContract: tokenContract,
191+
splToken: solanaTokenWallet?.splToken,
192+
),
194193
style: STextStyles.desktopH3(context),
195194
),
196195
),
@@ -222,7 +221,7 @@ class _WDesktopWalletSummaryState extends ConsumerState<DesktopWalletSummary> {
222221
walletId: walletId,
223222
initialSyncStatus: widget.initialSyncStatus,
224223
tokenContractAddress: widget.isToken && tokenContract != null
225-
? (tokenContract as EthContract).address
224+
? tokenContract.address
226225
: null,
227226
),
228227

lib/wallets/wallet/impl/sub_wallets/solana_token_wallet.dart

Lines changed: 9 additions & 14 deletions
Original file line numberDiff line numberDiff line change
@@ -15,16 +15,14 @@ import 'package:solana/solana.dart' hide Wallet;
1515

1616
import '../../../../db/isar/main_db.dart';
1717
import '../../../../models/balance.dart';
18-
import '../../../../models/isar/models/blockchain_data/transaction.dart';
1918
import '../../../../models/isar/models/blockchain_data/v2/input_v2.dart';
2019
import '../../../../models/isar/models/blockchain_data/v2/output_v2.dart';
2120
import '../../../../models/isar/models/blockchain_data/v2/transaction_v2.dart';
21+
import '../../../../models/isar/models/isar_models.dart';
2222
import '../../../../models/paymint/fee_object_model.dart';
2323
import '../../../../services/solana/solana_token_api.dart';
2424
import '../../../../utilities/amount/amount.dart';
2525
import '../../../../utilities/logger.dart';
26-
import '../../../crypto_currency/crypto_currency.dart';
27-
import '../../../isar/models/wallet_solana_token_info.dart';
2826
import '../../../models/tx_data.dart';
2927
import '../../wallet.dart';
3028
import '../solana_wallet.dart';
@@ -37,21 +35,18 @@ class SolanaTokenWallet extends Wallet {
3735
/// Create a new Solana Token Wallet.
3836
///
3937
/// Requires a parent SolanaWallet to provide RPC client and key management.
40-
SolanaTokenWallet({
41-
required this.parentSolanaWallet,
42-
required this.tokenMint,
43-
required this.tokenName,
44-
required this.tokenSymbol,
45-
required this.tokenDecimals,
46-
}) : super(Solana(CryptoCurrencyNetwork.main)); // TODO: make testnet-capable.
38+
SolanaTokenWallet(this.parentSolanaWallet, this.splToken)
39+
: super(parentSolanaWallet.cryptoCurrency);
4740

4841
/// Parent Solana wallet (provides RPC client and keypair access).
4942
final SolanaWallet parentSolanaWallet;
5043

51-
final String tokenMint;
52-
final String tokenName;
53-
final String tokenSymbol;
54-
final int tokenDecimals;
44+
final SplToken splToken;
45+
46+
String get tokenMint => splToken.address;
47+
String get tokenName => splToken.name;
48+
String get tokenSymbol => splToken.symbol;
49+
int get tokenDecimals => splToken.decimals;
5550

5651
/// Override walletId to delegate to parent wallet
5752
@override

0 commit comments

Comments
 (0)