sp improvements (#2418)

* feat: show sp keys

* fix: merge fixes

* feat: show sp receive address on tx details page

* feat(keys): show silent payment keys tab & keys tab

* Update lib/src/screens/wallet_keys/wallet_keys_page.dart

---------

Co-authored-by: Omar Hatem <omarh.ismail1@gmail.com>
This commit is contained in:
rafael_xmr
2025-08-06 21:02:08 +03:00
committed by GitHub
co-authored by Omar Hatem
parent 4dc5be7640
commit 778ac4783e
5 changed files with 117 additions and 48 deletions
@@ -2,6 +2,7 @@ import 'package:cake_wallet/entities/qr_view_data.dart';
import 'package:cake_wallet/generated/i18n.dart';
import 'package:cake_wallet/routes.dart';
import 'package:cake_wallet/src/screens/base_page.dart';
import 'package:cake_wallet/src/screens/transaction_details/standart_list_item.dart';
import 'package:cake_wallet/src/widgets/primary_button.dart';
import 'package:cake_wallet/src/widgets/seedphrase_grid_widget.dart';
import 'package:cake_wallet/src/widgets/text_info_box.dart';
@@ -67,6 +68,7 @@ class _WalletKeysPageBodyState extends State<WalletKeysPageBody>
with SingleTickerProviderStateMixin {
late TabController _tabController;
late bool showKeyTab;
late bool showSilentPaymentsTab;
late bool showLegacySeedTab;
late bool isLegacySeedOnly;
@@ -79,10 +81,15 @@ class _WalletKeysPageBodyState extends State<WalletKeysPageBody>
super.initState();
showKeyTab = widget.walletKeysViewModel.items.isNotEmpty;
showSilentPaymentsTab =
widget.walletKeysViewModel.isBitcoin && widget.walletKeysViewModel.items.length > 4;
showLegacySeedTab = widget.walletKeysViewModel.legacySeedSplit.isNotEmpty;
isLegacySeedOnly = widget.walletKeysViewModel.isLegacySeedOnly;
final totalTabs = (_hasSeeds ? 1 : 0) + (showKeyTab ? 1 : 0) + (showLegacySeedTab ? 1 : 0);
final totalTabs = (_hasSeeds ? 1 : 0) +
(showKeyTab ? 1 : 0) +
(showLegacySeedTab ? 1 : 0) +
(showSilentPaymentsTab ? 1 : 0);
_tabController = TabController(length: totalTabs, vsync: this);
}
@@ -108,13 +115,11 @@ class _WalletKeysPageBodyState extends State<WalletKeysPageBody>
isScrollable: true,
labelStyle: Theme.of(context).textTheme.bodyMedium!.copyWith(
fontSize: 18,
fontWeight: FontWeight.w600,
color: Theme.of(context).colorScheme.onSurfaceVariant,
),
unselectedLabelStyle: Theme.of(context).textTheme.bodyMedium!.copyWith(
fontSize: 18,
fontWeight: FontWeight.w600,
color: Theme.of(context).colorScheme.onSurfaceVariant.withOpacity(0.5),
),
@@ -126,9 +131,20 @@ class _WalletKeysPageBodyState extends State<WalletKeysPageBody>
dividerColor: Colors.transparent,
padding: EdgeInsets.zero,
tabs: [
if (_hasSeeds) Tab(text: S.of(context).widgets_seed, key: ValueKey('wallet_keys_page_seed')),
if (showKeyTab) Tab(text: S.of(context).keys, key: ValueKey('wallet_keys_page_keys'),),
if (showLegacySeedTab) Tab(text: S.of(context).legacy, key: ValueKey('wallet_keys_page_seed_legacy')),
if (_hasSeeds)
Tab(text: S.of(context).widgets_seed, key: ValueKey('wallet_keys_page_seed')),
if (showKeyTab)
Tab(
text: S.of(context).keys,
key: ValueKey('wallet_keys_page_keys'),
),
if (showSilentPaymentsTab)
Tab(
text: S.of(context).silent_payments,
key: ValueKey('wallet_keys_silent_payments_keys'),
),
if (showLegacySeedTab)
Tab(text: S.of(context).legacy, key: ValueKey('wallet_keys_page_seed_legacy')),
],
),
),
@@ -145,7 +161,12 @@ class _WalletKeysPageBodyState extends State<WalletKeysPageBody>
if (showKeyTab)
Padding(
padding: const EdgeInsets.only(left: 22, right: 22),
child: _buildKeysTab(context),
child: _buildKeysTab(context, showSilentPaymentsTab ? widget.walletKeysViewModel.items.sublist(0, 4) : widget.walletKeysViewModel.items),
),
if (showSilentPaymentsTab)
Padding(
padding: const EdgeInsets.only(left: 22, right: 22),
child: _buildKeysTab(context, widget.walletKeysViewModel.items.sublist(4)),
),
if (showLegacySeedTab)
Padding(
@@ -163,7 +184,7 @@ class _WalletKeysPageBodyState extends State<WalletKeysPageBody>
Widget _buildSeedTab(BuildContext context, bool isLegacySeed) {
return Column(
children: [
if (isLegacySeedOnly || isLegacySeed) ...[
if (isLegacySeedOnly || isLegacySeed || widget.walletKeysViewModel.isBitcoin) ...[
_buildHeightBox(),
const SizedBox(height: 20),
],
@@ -189,15 +210,15 @@ class _WalletKeysPageBodyState extends State<WalletKeysPageBody>
);
}
Widget _buildKeysTab(BuildContext context) {
Widget _buildKeysTab(BuildContext context, List<StandartListItem> items) {
return Column(
children: [
Expanded(
child: ListView.separated(
shrinkWrap: true,
itemCount: widget.walletKeysViewModel.items.length,
itemCount: items.length,
itemBuilder: (context, index) {
final item = widget.walletKeysViewModel.items[index];
final item = items[index];
return TextInfoBox(
key: item.key,
title: item.title,