make it possible to leave token details on desktop and various other small sol ui changes to bring it more in line with eth tokens
What changed, and why it matters
This commit is a routine user-interface refactor for the Stack Wallet app. It changes how Solana token details are shown on desktop so users can view them in a popup dialog instead of navigating to a separate page, and it makes Solana token pages behave more like existing Ethereum token pages. There is no indication this fixes a security vulnerability.
No security action required. Review as normal UI refactor if desired.
Security signals we found
No strong security signals were identified.
Evidence from the diff
The diff refactors Solana token view widgets to remove the explicit tokenMint constructor parameter and instead read the current token’s mint address from Riverpod provider state (pCurrentSolanaTokenWallet). It adds a desktop dialog (SDialog) for SolanaTokenContractDetailsView and TokenContractDetailsView, mirroring the existing Ethereum token desktop UX. Route argument types are simplified from records containing walletId and tokenMint to just walletId (or a record without tokenMint). The changes are purely UI/UX and state-management cleanup; no security-sensitive logic, input validation, cryptography, or network handling is modified.
Changed components
lib/pages/token_view/sol_token_view.dartlib/pages/token_view/sub_widgets/sol_token_select_item.dartlib/pages_desktop_specific/my_stack_view/wallet_view/desktop_sol_token_view.dartlib/pages_desktop_specific/my_stack_view/wallet_view/desktop_token_view.dartlib/route_generator.dartlib/widgets/wallet_card.dartInspect captured patch +227 / −182
diff --git a/lib/pages/token_view/sol_token_view.dart b/lib/pages/token_view/sol_token_view.dart
index 3253595..ab8b462 100644
--- a/lib/pages/token_view/sol_token_view.dart
+++ b/lib/pages/token_view/sol_token_view.dart
@@ -33,7 +33,6 @@ class SolTokenView extends ConsumerStatefulWidget {
const SolTokenView({
super.key,
required this.walletId,
- required this.tokenMint,
this.popPrevious = false,
this.eventBus,
});
@@ -41,7 +40,6 @@ class SolTokenView extends ConsumerStatefulWidget {
static const String routeName = "/sol_token";
final String walletId;
- final String tokenMint;
final bool popPrevious;
final EventBus? eventBus;
@@ -97,34 +95,37 @@ class _SolTokenViewState extends ConsumerState<SolTokenView> {
},
),
centerTitle: true,
- title: Consumer(
- builder: (context, ref, _) {
- final tokenWallet = ref.watch(pCurrentSolanaTokenWallet);
- final tokenName = tokenWallet?.tokenName ?? "Token";
- return Row(
- mainAxisAlignment: MainAxisAlignment.center,
- mainAxisSize: MainAxisSize.min,
- children: [
- Expanded(
- child: Row(
- mainAxisAlignment: MainAxisAlignment.center,
- children: [
- SolTokenIcon(mintAddress: widget.tokenMint, size: 24),
- const SizedBox(width: 10),
- Flexible(
- child: Text(
- tokenName,
- style: STextStyles.navBarTitle(context),
- overflow: TextOverflow.ellipsis,
- textAlign: TextAlign.center,
+ title: Row(
+ mainAxisAlignment: MainAxisAlignment.center,
+ mainAxisSize: MainAxisSize.min,
+ children: [
+ Expanded(
+ child: Row(
+ mainAxisAlignment: MainAxisAlignment.center,
+ children: [
+ SolTokenIcon(
+ mintAddress: ref.watch(
+ pCurrentSolanaTokenWallet.select((s) => s!.tokenMint),
+ ),
+ size: 24,
+ ),
+ const SizedBox(width: 10),
+ Flexible(
+ child: Text(
+ ref.watch(
+ pCurrentSolanaTokenWallet.select(
+ (s) => s!.tokenName,
),
),
- ],
+ style: STextStyles.navBarTitle(context),
+ overflow: TextOverflow.ellipsis,
+ textAlign: TextAlign.center,
+ ),
),
- ),
- ],
- );
- },
+ ],
+ ),
+ ),
+ ],
),
actions: [
Padding(
@@ -142,7 +143,7 @@ class _SolTokenViewState extends ConsumerState<SolTokenView> {
Navigator.of(context).pushNamed(
SolanaTokenContractDetailsView.routeName,
arguments: Tuple2(
- widget.tokenMint,
+ ref.read(pCurrentSolanaTokenWallet)!.tokenMint,
widget.walletId,
),
);
@@ -162,7 +163,9 @@ class _SolTokenViewState extends ConsumerState<SolTokenView> {
padding: const EdgeInsets.symmetric(horizontal: 16),
child: SolanaTokenSummary(
walletId: widget.walletId,
- tokenMint: widget.tokenMint,
+ tokenMint: ref.watch(
+ pCurrentSolanaTokenWallet.select((s) => s!.tokenMint),
+ ),
initialSyncStatus: initialSyncStatus,
),
),
diff --git a/lib/pages/token_view/sub_widgets/sol_token_select_item.dart b/lib/pages/token_view/sub_widgets/sol_token_select_item.dart
index 556be9f..b7a149b 100644
--- a/lib/pages/token_view/sub_widgets/sol_token_select_item.dart
+++ b/lib/pages/token_view/sub_widgets/sol_token_select_item.dart
@@ -123,10 +123,7 @@ class _SolTokenSelectItemState extends ConsumerState<SolTokenSelectItem> {
unawaited(ref.read(pCurrentSolanaTokenWallet)!.refresh());
await Navigator.of(context).pushNamed(
isDesktop ? DesktopSolTokenView.routeName : SolTokenView.routeName,
- arguments: (
- walletId: widget.walletId,
- tokenMint: widget.token.address,
- ),
+ arguments: widget.walletId,
);
}
}
@@ -147,10 +144,9 @@ class _SolTokenSelectItemState extends ConsumerState<SolTokenSelectItem> {
padding: const EdgeInsets.all(0),
child: MaterialButton(
key: Key("walletListItemButtonKey_${widget.token.symbol}"),
- padding:
- isDesktop
- ? const EdgeInsets.symmetric(horizontal: 28, vertical: 24)
- : const EdgeInsets.symmetric(horizontal: 12, vertical: 13),
+ padding: isDesktop
+ ? const EdgeInsets.symmetric(horizontal: 28, vertical: 24)
+ : const EdgeInsets.symmetric(horizontal: 12, vertical: 13),
materialTapTargetSize: MaterialTapTargetSize.shrinkWrap,
shape: RoundedRectangleBorder(
borderRadius: BorderRadius.circular(
@@ -160,26 +156,23 @@ class _SolTokenSelectItemState extends ConsumerState<SolTokenSelectItem> {
onPressed: _onPressed,
child: Row(
children: [
- SolTokenIcon(
- mintAddress: widget.token.address,
- size: 32,
- ),
+ SolTokenIcon(mintAddress: widget.token.address, size: 32),
SizedBox(width: isDesktop ? 12 : 10),
Expanded(
child: Consumer(
builder: (_, ref, __) {
// Watch the balance from the database.
final balance = ref.watch(
- pSolanaTokenBalance(
- (
- walletId: widget.walletId,
- tokenMint: widget.token.address,
- ),
- ),
+ pSolanaTokenBalance((
+ walletId: widget.walletId,
+ tokenMint: widget.token.address,
+ )),
);
// Format the balance.
- final decimalValue = balance.total.decimal.toStringAsFixed(widget.token.decimals);
+ final decimalValue = balance.total.decimal.toStringAsFixed(
+ widget.token.decimals,
+ );
final balanceString = "$decimalValue ${widget.token.symbol}";
return Column(
@@ -189,32 +182,28 @@ class _SolTokenSelectItemState extends ConsumerState<SolTokenSelectItem> {
children: [
Text(
widget.token.name,
- style:
- isDesktop
- ? STextStyles.desktopTextExtraSmall(
+ style: isDesktop
+ ? STextStyles.desktopTextExtraSmall(
+ context,
+ ).copyWith(
+ color: Theme.of(
context,
- ).copyWith(
- color:
- Theme.of(
- context,
- ).extension<StackColors>()!.textDark,
- )
- : STextStyles.titleBold12(context),
+ ).extension<StackColors>()!.textDark,
+ )
+ : STextStyles.titleBold12(context),
),
const Spacer(),
Text(
balanceString,
- style:
- isDesktop
- ? STextStyles.desktopTextExtraSmall(
+ style: isDesktop
+ ? STextStyles.desktopTextExtraSmall(
+ context,
+ ).copyWith(
+ color: Theme.of(
context,
- ).copyWith(
- color:
- Theme.of(
- context,
- ).extension<StackColors>()!.textDark,
- )
- : STextStyles.itemSubtitle(context),
+ ).extension<StackColors>()!.textDark,
+ )
+ : STextStyles.itemSubtitle(context),
),
],
),
@@ -223,24 +212,22 @@ class _SolTokenSelectItemState extends ConsumerState<SolTokenSelectItem> {
children: [
Text(
widget.token.symbol,
- style:
- isDesktop
- ? STextStyles.desktopTextExtraExtraSmall(
- context,
- )
- : STextStyles.itemSubtitle(context),
+ style: isDesktop
+ ? STextStyles.desktopTextExtraExtraSmall(
+ context,
+ )
+ : STextStyles.itemSubtitle(context),
),
const Spacer(),
if (priceString != null)
Text(
"$priceString "
"${ref.watch(prefsChangeNotifierProvider.select((value) => value.currency))}",
- style:
- isDesktop
- ? STextStyles.desktopTextExtraExtraSmall(
- context,
- )
- : STextStyles.itemSubtitle(context),
+ style: isDesktop
+ ? STextStyles.desktopTextExtraExtraSmall(
+ context,
+ )
+ : STextStyles.itemSubtitle(context),
),
],
),
diff --git a/lib/pages_desktop_specific/my_stack_view/wallet_view/desktop_sol_token_view.dart b/lib/pages_desktop_specific/my_stack_view/wallet_view/desktop_sol_token_view.dart
index 12dab0b..c8a5a66 100644
--- a/lib/pages_desktop_specific/my_stack_view/wallet_view/desktop_sol_token_view.dart
+++ b/lib/pages_desktop_specific/my_stack_view/wallet_view/desktop_sol_token_view.dart
@@ -11,7 +11,6 @@ import 'package:event_bus/event_bus.dart';
import 'package:flutter/material.dart';
import 'package:flutter_riverpod/flutter_riverpod.dart';
import 'package:flutter_svg/svg.dart';
-import 'package:tuple/tuple.dart';
import '../../../pages/send_view/sub_widgets/transaction_fee_selection_sheet.dart';
import '../../../pages/token_view/solana_token_contract_details_view.dart';
@@ -26,8 +25,10 @@ import '../../../wallets/isar/providers/wallet_info_provider.dart';
import '../../../widgets/coin_ticker_tag.dart';
import '../../../widgets/custom_buttons/blue_text_button.dart';
import '../../../widgets/desktop/desktop_app_bar.dart';
+import '../../../widgets/desktop/desktop_dialog_close_button.dart';
import '../../../widgets/desktop/desktop_scaffold.dart';
import '../../../widgets/desktop/secondary_button.dart';
+import '../../../widgets/dialogs/s_dialog.dart';
import '../../../widgets/icon_widgets/sol_token_icon.dart';
import '../../../widgets/rounded_white_container.dart';
import 'sub_widgets/desktop_wallet_features.dart';
@@ -36,17 +37,11 @@ import 'sub_widgets/my_wallet.dart';
/// [eventBus] should only be set during testing.
class DesktopSolTokenView extends ConsumerStatefulWidget {
- const DesktopSolTokenView({
- super.key,
- required this.walletId,
- required this.tokenMint,
- this.eventBus,
- });
+ const DesktopSolTokenView({super.key, required this.walletId, this.eventBus});
static const String routeName = "/desktopSolTokenView";
final String walletId;
- final String tokenMint;
final EventBus? eventBus;
@override
@@ -108,35 +103,73 @@ class _DesktopTokenViewState extends ConsumerState<DesktopSolTokenView> {
),
center: Expanded(
flex: 4,
- child: Consumer(
- builder: (context, ref, _) {
- final tokenWallet = ref.watch(pCurrentSolanaTokenWallet);
- final tokenName = tokenWallet?.tokenName ?? "Token";
- final tokenSymbol = tokenWallet?.tokenSymbol ?? "SOL";
- return GestureDetector(
- onTap: () {
- Navigator.of(context).pushNamed(
- SolanaTokenContractDetailsView.routeName,
- arguments: Tuple2(
- widget.tokenMint,
- widget.walletId,
+ child: GestureDetector(
+ onTap: () {
+ showDialog<void>(
+ context: context,
+ builder: (context) => SDialog(
+ child: SizedBox(
+ width: 580,
+ child: Column(
+ children: [
+ Row(
+ mainAxisAlignment: MainAxisAlignment.spaceBetween,
+ children: [
+ Padding(
+ padding: const EdgeInsets.only(left: 32),
+ child: Text(
+ "Token details",
+ style: STextStyles.desktopH3(context),
+ ),
+ ),
+ const DesktopDialogCloseButton(),
+ ],
+ ),
+ Padding(
+ padding: const EdgeInsets.symmetric(horizontal: 32),
+ child: SolanaTokenContractDetailsView(
+ tokenMint: ref
+ .read(pCurrentSolanaTokenWallet)!
+ .tokenMint,
+ walletId: widget.walletId,
+ ),
+ ),
+ ],
),
- );
- },
- child: MouseRegion(
- cursor: SystemMouseCursors.click,
- child: Row(
- children: [
- SolTokenIcon(mintAddress: widget.tokenMint, size: 32),
- const SizedBox(width: 12),
- Text(tokenName, style: STextStyles.desktopH3(context)),
- const SizedBox(width: 12),
- CoinTickerTag(ticker: tokenSymbol),
- ],
),
),
);
},
+ child: MouseRegion(
+ cursor: SystemMouseCursors.click,
+ child: Row(
+ children: [
+ SolTokenIcon(
+ mintAddress: ref.watch(
+ pCurrentSolanaTokenWallet.select(
+ (value) => value!.tokenMint,
+ ),
+ ),
+ size: 32,
+ ),
+ const SizedBox(width: 12),
+ Text(
+ ref.watch(
+ pCurrentSolanaTokenWallet.select(
+ (value) => value!.tokenName,
+ ),
+ ),
+ style: STextStyles.desktopH3(context),
+ ),
+ const SizedBox(width: 12),
+ CoinTickerTag(
+ ticker: ref.watch(
+ pWalletCoin(widget.walletId).select((s) => s.ticker),
+ ),
+ ),
+ ],
+ ),
+ ),
),
),
useSpacers: false,
@@ -150,7 +183,14 @@ class _DesktopTokenViewState extends ConsumerState<DesktopSolTokenView> {
padding: const EdgeInsets.all(20),
child: Row(
children: [
- SolTokenIcon(mintAddress: widget.tokenMint, size: 40),
+ SolTokenIcon(
+ mintAddress: ref.watch(
+ pCurrentSolanaTokenWallet.select(
+ (value) => value!.tokenMint,
+ ),
+ ),
+ size: 40,
+ ),
const SizedBox(width: 10),
DesktopWalletSummary(
walletId: widget.walletId,
@@ -217,7 +257,11 @@ class _DesktopTokenViewState extends ConsumerState<DesktopSolTokenView> {
width: sendReceiveColumnWidth,
child: MyWallet(
walletId: widget.walletId,
- contractAddress: widget.tokenMint,
+ contractAddress: ref.watch(
+ pCurrentSolanaTokenWallet.select(
+ (value) => value!.tokenMint,
+ ),
+ ),
),
),
const SizedBox(width: 16),
diff --git a/lib/pages_desktop_specific/my_stack_view/wallet_view/desktop_token_view.dart b/lib/pages_desktop_specific/my_stack_view/wallet_view/desktop_token_view.dart
index c1597a4..f112ffe 100644
--- a/lib/pages_desktop_specific/my_stack_view/wallet_view/desktop_token_view.dart
+++ b/lib/pages_desktop_specific/my_stack_view/wallet_view/desktop_token_view.dart
@@ -12,7 +12,6 @@ import 'package:event_bus/event_bus.dart';
import 'package:flutter/material.dart';
import 'package:flutter_riverpod/flutter_riverpod.dart';
import 'package:flutter_svg/svg.dart';
-import 'package:tuple/tuple.dart';
import '../../../pages/send_view/sub_widgets/transaction_fee_selection_sheet.dart';
import '../../../pages/token_view/sub_widgets/token_transaction_list_widget.dart';
@@ -28,8 +27,10 @@ import '../../../wallets/isar/providers/wallet_info_provider.dart';
import '../../../widgets/coin_ticker_tag.dart';
import '../../../widgets/custom_buttons/blue_text_button.dart';
import '../../../widgets/desktop/desktop_app_bar.dart';
+import '../../../widgets/desktop/desktop_dialog_close_button.dart';
import '../../../widgets/desktop/desktop_scaffold.dart';
import '../../../widgets/desktop/secondary_button.dart';
+import '../../../widgets/dialogs/s_dialog.dart';
import '../../../widgets/icon_widgets/eth_token_icon.dart';
import '../../../widgets/rounded_white_container.dart';
import 'sub_widgets/desktop_wallet_features.dart';
@@ -56,10 +57,9 @@ class _DesktopTokenViewState extends ConsumerState<DesktopTokenView> {
@override
void initState() {
- initialSyncStatus =
- ref.read(pCurrentTokenWallet)!.refreshMutex.isLocked
- ? WalletSyncStatus.syncing
- : WalletSyncStatus.synced;
+ initialSyncStatus = ref.read(pCurrentTokenWallet)!.refreshMutex.isLocked
+ ? WalletSyncStatus.syncing
+ : WalletSyncStatus.synced;
super.initState();
}
@@ -88,10 +88,9 @@ class _DesktopTokenViewState extends ConsumerState<DesktopTokenView> {
Assets.svg.arrowLeft,
width: 18,
height: 18,
- color:
- Theme.of(
- context,
- ).extension<StackColors>()!.topNavIconPrimary,
+ color: Theme.of(
+ context,
+ ).extension<StackColors>()!.topNavIconPrimary,
),
onPressed: () {
ref.refresh(feeSheetSessionCacheProvider);
@@ -106,15 +105,43 @@ class _DesktopTokenViewState extends ConsumerState<DesktopTokenView> {
flex: 4,
child: GestureDetector(
onTap: () {
- final contractAddress = ref.watch(
- pCurrentTokenWallet.select(
- (value) => value!.tokenContract.address,
+ final contractAddress = ref
+ .read(pCurrentTokenWallet)!
+ .tokenContract
+ .address;
+
+ showDialog<void>(
+ context: context,
+ builder: (context) => SDialog(
+ child: SizedBox(
+ width: 580,
+ child: Column(
+ children: [
+ Row(
+ mainAxisAlignment: MainAxisAlignment.spaceBetween,
+ children: [
+ Padding(
+ padding: const EdgeInsets.only(left: 32),
+ child: Text(
+ "Token details",
+ style: STextStyles.desktopH3(context),
+ ),
+ ),
+ const DesktopDialogCloseButton(),
+ ],
+ ),
+ Padding(
+ padding: const EdgeInsets.symmetric(horizontal: 32),
+ child: TokenContractDetailsView(
+ contractAddress: contractAddress,
+ walletId: widget.walletId,
+ ),
+ ),
+ ],
+ ),
+ ),
),
);
- Navigator.of(context).pushNamed(
- TokenContractDetailsView.routeName,
- arguments: Tuple2(contractAddress, widget.walletId),
- );
},
child: MouseRegion(
cursor: SystemMouseCursors.click,
@@ -173,12 +200,12 @@ class _DesktopTokenViewState extends ConsumerState<DesktopTokenView> {
isToken: true,
initialSyncStatus:
ref
- .watch(pWallets)
- .getWallet(widget.walletId)
- .refreshMutex
- .isLocked
- ? WalletSyncStatus.syncing
- : WalletSyncStatus.synced,
+ .watch(pWallets)
+ .getWallet(widget.walletId)
+ .refreshMutex
+ .isLocked
+ ? WalletSyncStatus.syncing
+ : WalletSyncStatus.synced,
),
const Spacer(),
DesktopWalletFeatures(walletId: widget.walletId),
@@ -193,10 +220,9 @@ class _DesktopTokenViewState extends ConsumerState<DesktopTokenView> {
child: Text(
"My wallet",
style: STextStyles.desktopTextExtraSmall(context).copyWith(
- color:
- Theme.of(context)
- .extension<StackColors>()!
- .textFieldActiveSearchIconLeft,
+ color: Theme.of(
+ context,
+ ).extension<StackColors>()!.textFieldActiveSearchIconLeft,
),
),
),
@@ -207,14 +233,12 @@ class _DesktopTokenViewState extends ConsumerState<DesktopTokenView> {
children: [
Text(
"Recent transactions",
- style: STextStyles.desktopTextExtraSmall(
- context,
- ).copyWith(
- color:
- Theme.of(context)
+ style: STextStyles.desktopTextExtraSmall(context)
+ .copyWith(
+ color: Theme.of(context)
.extension<StackColors>()!
.textFieldActiveSearchIconLeft,
- ),
+ ),
),
CustomTextButton(
text: "See all",
diff --git a/lib/route_generator.dart b/lib/route_generator.dart
index b3ee6e2..e6a24ec 100644
--- a/lib/route_generator.dart
+++ b/lib/route_generator.dart
@@ -63,6 +63,7 @@ import 'pages/churning/churning_progress_view.dart';
import 'pages/churning/churning_view.dart';
import 'pages/coin_control/coin_control_view.dart';
import 'pages/coin_control/utxo_details_view.dart';
+import 'pages/epic_finalize_view/epic_finalize_view.dart';
import 'pages/exchange_view/choose_from_stack_view.dart';
import 'pages/exchange_view/edit_trade_note_view.dart';
import 'pages/exchange_view/exchange_step_views/step_1_view.dart';
@@ -72,7 +73,6 @@ import 'pages/exchange_view/exchange_step_views/step_4_view.dart';
import 'pages/exchange_view/send_from_view.dart';
import 'pages/exchange_view/trade_details_view.dart';
import 'pages/exchange_view/wallet_initiated_exchange_view.dart';
-import 'pages/epic_finalize_view/epic_finalize_view.dart';
import 'pages/finalize_view/finalize_view.dart';
import 'pages/generic/single_field_edit_view.dart';
import 'pages/home_view/home_view.dart';
@@ -381,13 +381,10 @@ class RouteGenerator {
return _routeError("${settings.name} invalid args: ${args.toString()}");
case DesktopSolTokenView.routeName:
- if (args is ({String walletId, String tokenMint})) {
+ if (args is String) {
return getRoute(
shouldUseMaterialRoute: useMaterialPageRoute,
- builder: (_) => DesktopSolTokenView(
- walletId: args.walletId,
- tokenMint: args.tokenMint,
- ),
+ builder: (_) => DesktopSolTokenView(walletId: args),
settings: RouteSettings(name: settings.name),
);
}
@@ -2649,22 +2646,17 @@ class RouteGenerator {
return _routeError("${settings.name} invalid args: ${args.toString()}");
case SolTokenView.routeName:
- if (args is ({String walletId, String tokenMint})) {
+ if (args is String) {
return getRoute(
shouldUseMaterialRoute: useMaterialPageRoute,
- builder: (_) => SolTokenView(
- walletId: args.walletId,
- tokenMint: args.tokenMint,
- ),
+ builder: (_) => SolTokenView(walletId: args),
settings: RouteSettings(name: settings.name),
);
- } else if (args
- is ({String walletId, String tokenMint, bool popPrevious})) {
+ } else if (args is ({String walletId, bool popPrevious})) {
return getRoute(
shouldUseMaterialRoute: useMaterialPageRoute,
builder: (_) => SolTokenView(
walletId: args.walletId,
- tokenMint: args.tokenMint,
popPrevious: args.popPrevious,
),
settings: RouteSettings(name: settings.name),
diff --git a/lib/widgets/wallet_card.dart b/lib/widgets/wallet_card.dart
index 8c6ab83..f502d21 100644
--- a/lib/widgets/wallet_card.dart
+++ b/lib/widgets/wallet_card.dart
@@ -21,7 +21,6 @@ import '../pages/wallet_view/wallet_view.dart';
import '../pages_desktop_specific/my_stack_view/wallet_view/desktop_sol_token_view.dart';
import '../pages_desktop_specific/my_stack_view/wallet_view/desktop_token_view.dart';
import '../pages_desktop_specific/my_stack_view/wallet_view/desktop_wallet_view.dart';
-import '../providers/db/main_db_provider.dart';
import '../providers/providers.dart';
import '../utilities/constants.dart';
import '../utilities/logger.dart';
@@ -66,10 +65,12 @@ class SimpleWalletCard extends ConsumerWidget {
final old = ref.read(tokenServiceStateProvider);
// exit previous if there is one
unawaited(old?.exit());
- ref.read(tokenServiceStateProvider.state).state = Wallet.loadTokenWallet(
- ethWallet: wallet as EthereumWallet,
- contract: contract,
- ) as EthTokenWallet;
+ ref.read(tokenServiceStateProvider.state).state =
+ Wallet.loadTokenWallet(
+ ethWallet: wallet as EthereumWallet,
+ contract: contract,
+ )
+ as EthTokenWallet;
try {
await ref.read(pCurrentTokenWallet)!.init();
@@ -181,12 +182,7 @@ class SimpleWalletCard extends ConsumerWidget {
),
);
} else {
- unawaited(
- nav.pushNamed(
- WalletView.routeName,
- arguments: walletId,
- ),
- );
+ unawaited(nav.pushNamed(WalletView.routeName, arguments: walletId));
}
}
@@ -218,26 +214,26 @@ class SimpleWalletCard extends ConsumerWidget {
);
if (!success!) {
- Logging.instance.e(
- "Failed to load token wallet for $token",
- );
+ Logging.instance.e("Failed to load token wallet for $token");
return;
}
if (desktopNavigatorState != null) {
await desktopNavigatorState!.pushNamed(
DesktopSolTokenView.routeName,
- arguments: (walletId: walletId, tokenMint: contractAddress!),
+ arguments: walletId,
);
} else {
await nav.pushNamed(
SolTokenView.routeName,
- arguments: (walletId: walletId, tokenMint: contractAddress!),
+ arguments: (walletId: walletId, popPrevious: !Util.isDesktop),
);
}
} else {
// Handle Ethereum token (default).
- final contract = ref.read(mainDBProvider).getEthContractSync(contractAddress!);
+ final contract = ref
+ .read(mainDBProvider)
+ .getEthContractSync(contractAddress!);
if (contract == null) {
Logging.instance.e(
@@ -260,9 +256,7 @@ class SimpleWalletCard extends ConsumerWidget {
);
if (!success!) {
- Logging.instance.e(
- "Failed to load token wallet for $contract",
- );
+ Logging.instance.e("Failed to load token wallet for $contract");
return;
}
@@ -305,8 +299,9 @@ class SimpleWalletCard extends ConsumerWidget {
child: WalletInfoRow(
walletId: walletId,
contractAddress: contractAddress,
- onPressedDesktop:
- Util.isDesktop ? () => _openWallet(context, ref) : null,
+ onPressedDesktop: Util.isDesktop
+ ? () => _openWallet(context, ref)
+ : null,
),
);
}
Why this scored 12/100
Community notes
Notes can correct, qualify, or add evidence to the AI analysis. Every note shown here has been validated by a human moderator.
The AI analysis stands alone for now. Submit a note if you can add evidence or important context.