What changed, and why it matters
This commit is a user-interface change for the desktop version of Stack Wallet. It makes the token name/header area on two desktop token detail pages respond to taps/clicks by opening a contract details screen. There is no indication this fixes or introduces a security problem.
No security action needed; treat as a normal UI feature commit.
Security signals we found
No strong security signals were identified.
Evidence from the diff
The diff wraps existing header Row widgets in GestureDetector + MouseRegion so that clicking the token header navigates to SolanaTokenContractDetailsView or TokenContractDetailsView, passing a Tuple2 of (contract/mint address, walletId). It adds two imports (tuple package and the details view routes). No logic affecting cryptography, validation, network calls, permissions, or data handling is changed.
Changed components
lib/pages_desktop_specific/my_stack_view/wallet_view/desktop_sol_token_view.dartlib/pages_desktop_specific/my_stack_view/wallet_view/desktop_token_view.dartInspect captured patch +65 / −31
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 7f96315..ce19784 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,9 +11,11 @@ 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 '../../../models/isar/models/isar_models.dart';
import '../../../pages/send_view/sub_widgets/transaction_fee_selection_sheet.dart';
+import '../../../pages/token_view/solana_token_contract_details_view.dart';
import '../../../pages/token_view/sub_widgets/token_transaction_list_widget_sol.dart';
import '../../../providers/db/main_db_provider.dart';
import '../../../providers/providers.dart';
@@ -175,14 +177,28 @@ class _DesktopTokenViewState extends ConsumerState<DesktopSolTokenView> {
final tokenWallet = ref.watch(pCurrentSolanaTokenWallet);
final tokenName = tokenWallet?.tokenName ?? "Token";
final tokenSymbol = tokenWallet?.tokenSymbol ?? "SOL";
- return 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),
- ],
+ return GestureDetector(
+ onTap: () {
+ Navigator.of(context).pushNamed(
+ SolanaTokenContractDetailsView.routeName,
+ arguments: Tuple2(
+ widget.tokenMint,
+ 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),
+ ],
+ ),
+ ),
);
},
),
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 577d4e3..c1597a4 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,9 +12,11 @@ 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';
+import '../../../pages/token_view/token_contract_details_view.dart';
import '../../../pages/wallet_view/transaction_views/tx_v2/all_transactions_v2_view.dart';
import '../../../providers/providers.dart';
import '../../../services/event_bus/events/global/wallet_sync_status_changed_event.dart';
@@ -102,32 +104,48 @@ class _DesktopTokenViewState extends ConsumerState<DesktopTokenView> {
),
center: Expanded(
flex: 4,
- child: Row(
- children: [
- EthTokenIcon(
- contractAddress: ref.watch(
- pCurrentTokenWallet.select(
- (value) => value!.tokenContract.address,
- ),
+ child: GestureDetector(
+ onTap: () {
+ final contractAddress = ref.watch(
+ pCurrentTokenWallet.select(
+ (value) => value!.tokenContract.address,
),
- size: 32,
- ),
- const SizedBox(width: 12),
- Text(
- ref.watch(
- pCurrentTokenWallet.select(
- (value) => value!.tokenContract.name,
+ );
+ Navigator.of(context).pushNamed(
+ TokenContractDetailsView.routeName,
+ arguments: Tuple2(contractAddress, widget.walletId),
+ );
+ },
+ child: MouseRegion(
+ cursor: SystemMouseCursors.click,
+ child: Row(
+ children: [
+ EthTokenIcon(
+ contractAddress: ref.watch(
+ pCurrentTokenWallet.select(
+ (value) => value!.tokenContract.address,
+ ),
+ ),
+ size: 32,
),
- ),
- style: STextStyles.desktopH3(context),
- ),
- const SizedBox(width: 12),
- CoinTickerTag(
- ticker: ref.watch(
- pWalletCoin(widget.walletId).select((s) => s.ticker),
- ),
+ const SizedBox(width: 12),
+ Text(
+ ref.watch(
+ pCurrentTokenWallet.select(
+ (value) => value!.tokenContract.name,
+ ),
+ ),
+ style: STextStyles.desktopH3(context),
+ ),
+ const SizedBox(width: 12),
+ CoinTickerTag(
+ ticker: ref.watch(
+ pWalletCoin(widget.walletId).select((s) => s.ticker),
+ ),
+ ),
+ ],
),
- ],
+ ),
),
),
useSpacers: false,
Why this scored 15/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.