From 45cba318ce81a1d9cafa4e493d75ba259c0d39f6 Mon Sep 17 00:00:00 2001 From: Konstantin Ullrich Date: Tue, 2 Jun 2026 14:12:56 +0200 Subject: [PATCH 1/6] refactor: replace deprecated SVG resource, adjust device tap behavior, and improve wallet selection image rendering (#3276) * refactor: replace deprecated SVG resource, adjust device tap behavior, and improve wallet selection image rendering * fix: render wallet image and update text style on NewWalletTypePage --- .../screens/connect_device/connect_device_page.dart | 2 +- .../select_hardware_wallet_account_page.dart | 8 ++++---- lib/src/screens/new_wallet/new_wallet_type_page.dart | 12 +++++++++++- res/pictures/wallet-trezor.svg | 10 ---------- 4 files changed, 16 insertions(+), 16 deletions(-) delete mode 100644 res/pictures/wallet-trezor.svg diff --git a/lib/src/screens/connect_device/connect_device_page.dart b/lib/src/screens/connect_device/connect_device_page.dart index 22e466cf3..3e3bda042 100644 --- a/lib/src/screens/connect_device/connect_device_page.dart +++ b/lib/src/screens/connect_device/connect_device_page.dart @@ -7,7 +7,6 @@ import 'package:cake_wallet/main.dart'; import 'package:cake_wallet/new-ui/widgets/new_primary_button.dart'; import 'package:cake_wallet/routes.dart'; import 'package:cake_wallet/src/screens/base_page.dart'; -import 'package:cake_wallet/src/screens/connect_device/widgets/device_tile.dart'; import 'package:cake_wallet/src/widgets/bottom_sheet/info_steps_bottom_sheet_widget.dart'; import 'package:cake_wallet/src/widgets/cake_image_widget.dart'; import 'package:cake_wallet/src/widgets/primary_button.dart'; @@ -250,6 +249,7 @@ class ConnectDevicePageBodyState extends State { final item = allDevices[index]; return GestureDetector( onTap: () => _connectToDevice(item), + behavior: HitTestBehavior.opaque, child: SizedBox( height: 48, child: Padding( diff --git a/lib/src/screens/connect_device/select_hardware_wallet_account_page.dart b/lib/src/screens/connect_device/select_hardware_wallet_account_page.dart index 678b5e3b8..98cb577ce 100644 --- a/lib/src/screens/connect_device/select_hardware_wallet_account_page.dart +++ b/lib/src/screens/connect_device/select_hardware_wallet_account_page.dart @@ -1,4 +1,5 @@ import 'package:cake_wallet/core/wallet_name_validator.dart'; +import 'package:cake_wallet/src/widgets/cake_image_widget.dart'; import 'package:cw_core/generate_name.dart'; import 'package:cake_wallet/generated/i18n.dart'; import 'package:cake_wallet/src/screens/base_page.dart'; @@ -147,10 +148,9 @@ class _SelectHardwareWalletAccountFormState extends State { child: Column( spacing: 24, children: [ - const NewWalletTypePageHeader(), + widget.hardwareWalletType != null + ? const NewWalletTypePageHeader() + : const CakeImageWidget( + imageUrl: "assets/new-ui/wallet.svg", + width: 100, + height: 100, + ), Text( S.of(context).choose_wallet_currency, textAlign: TextAlign.center, + style: TextStyle( + color: Theme.of(context).colorScheme.onSurfaceVariant, + fontSize: 14, + ), ), Flexible( child: Padding( diff --git a/res/pictures/wallet-trezor.svg b/res/pictures/wallet-trezor.svg deleted file mode 100644 index d0747c444..000000000 --- a/res/pictures/wallet-trezor.svg +++ /dev/null @@ -1,10 +0,0 @@ - - - - - - - - - - From e6969d868c4f5643e82f546a27f3757b98ede72e Mon Sep 17 00:00:00 2001 From: Konstantin Ullrich Date: Tue, 2 Jun 2026 15:06:38 +0200 Subject: [PATCH 2/6] chore: update trezor-flutter dependency to latest commit (#3277) --- cw_monero/pubspec.yaml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/cw_monero/pubspec.yaml b/cw_monero/pubspec.yaml index 4c10e94d7..06d0e56c4 100644 --- a/cw_monero/pubspec.yaml +++ b/cw_monero/pubspec.yaml @@ -33,7 +33,7 @@ dependencies: trezor_flutter: git: url: https://github.com/cake-tech/trezor-flutter.git - ref: 4bf54339a1caefd4c53a4a8873a9686ec13a9107 + ref: becd18ac474d343d94b6191d89fad43270d2a02e path: trezor-flutter dev_dependencies: From a8a70f5bb9490684f570c6ead3cd685f0cb4915b Mon Sep 17 00:00:00 2001 From: tuxsudo Date: Tue, 2 Jun 2026 13:45:44 +0000 Subject: [PATCH 3/6] Node UI Fixes (#3275) * UI fixes, updated icons, and temporarily revert Rescan button * readd ping test button to node list, readd rescan to connections, fixup ui * increase gap for node edit button * remove rescan from connections for sp * remove rescan from connections for mweb --------- Co-authored-by: Robert Malikowski --- cw_monero/pubspec.lock | 2 +- cw_wownero/pubspec.lock | 2 +- cw_zano/pubspec.lock | 2 +- lib/new-ui/widgets/modal_header.dart | 74 ++++++----- .../screens/nodes/widgets/node_list_row.dart | 72 ++++++----- .../settings/connection_sync_page.dart | 6 + .../screens/settings/manage_nodes_page.dart | 115 +++++++++--------- .../node_list/node_list_view_model.dart | 11 +- .../settings/connection_sync_view_model.dart | 2 + .../node_speed_badges/disconnected-dark.svg | 6 + .../node_speed_badges/disconnected.svg | 6 +- res/pictures/node_speed_badges/fast.svg | 2 +- res/pictures/node_speed_badges/medium.svg | 4 +- res/pictures/node_speed_badges/slow-dark.svg | 7 ++ res/pictures/node_speed_badges/slow.svg | 10 +- 15 files changed, 187 insertions(+), 134 deletions(-) create mode 100644 res/pictures/node_speed_badges/disconnected-dark.svg create mode 100644 res/pictures/node_speed_badges/slow-dark.svg diff --git a/cw_monero/pubspec.lock b/cw_monero/pubspec.lock index d00f2149e..fc33c6fe8 100644 --- a/cw_monero/pubspec.lock +++ b/cw_monero/pubspec.lock @@ -592,7 +592,7 @@ packages: path: "impls/monero.dart" ref: "3bfb3856a838f2bf6b729501837bb0295dedf25d" resolved-ref: "3bfb3856a838f2bf6b729501837bb0295dedf25d" - url: "http://github.com/mrcyjanek/monero_c.git" + url: "https://github.com/mrcyjanek/monero_c.git" source: git version: "0.0.0" mutex: diff --git a/cw_wownero/pubspec.lock b/cw_wownero/pubspec.lock index 55cfb8fdf..3c12da261 100644 --- a/cw_wownero/pubspec.lock +++ b/cw_wownero/pubspec.lock @@ -504,7 +504,7 @@ packages: path: "impls/monero.dart" ref: "3bfb3856a838f2bf6b729501837bb0295dedf25d" resolved-ref: "3bfb3856a838f2bf6b729501837bb0295dedf25d" - url: "http://github.com/mrcyjanek/monero_c.git" + url: "https://github.com/mrcyjanek/monero_c.git" source: git version: "0.0.0" mutex: diff --git a/cw_zano/pubspec.lock b/cw_zano/pubspec.lock index 6e2916d71..080704b93 100644 --- a/cw_zano/pubspec.lock +++ b/cw_zano/pubspec.lock @@ -509,7 +509,7 @@ packages: path: "impls/monero.dart" ref: "3bfb3856a838f2bf6b729501837bb0295dedf25d" resolved-ref: "3bfb3856a838f2bf6b729501837bb0295dedf25d" - url: "http://github.com/mrcyjanek/monero_c.git" + url: "https://github.com/mrcyjanek/monero_c.git" source: git version: "0.0.0" nested: diff --git a/lib/new-ui/widgets/modal_header.dart b/lib/new-ui/widgets/modal_header.dart index 6bef2bba5..b43b07d03 100644 --- a/lib/new-ui/widgets/modal_header.dart +++ b/lib/new-ui/widgets/modal_header.dart @@ -1,6 +1,5 @@ import 'package:cake_wallet/src/widgets/cake_image_widget.dart'; import 'package:flutter/material.dart'; -import 'package:flutter_svg/svg.dart'; class ModalHeader extends StatelessWidget { const ModalHeader( @@ -17,38 +16,49 @@ class ModalHeader extends StatelessWidget { decoration: BoxDecoration( color: Theme.of(context).colorScheme.surfaceContainer, borderRadius: BorderRadius.circular(16)), - child: Padding( - padding: const EdgeInsets.all(12.0), - child: Column( - spacing: 10, - mainAxisAlignment: MainAxisAlignment.center, - crossAxisAlignment: CrossAxisAlignment.center, - children: [ - CakeImageWidget( - imageUrl: iconPath, width: 36, height: 36), - Text( - title, - style: TextStyle( - fontSize: 16, - fontWeight: FontWeight.w500, - color: Theme.of(context).colorScheme.onSurface), - ), - Padding( - padding: EdgeInsets.symmetric(horizontal: 32), - child: Text( - message, + child: Column( + children: [ + Padding( + padding: const EdgeInsets.all(12.0), + child: Column( + spacing: 10, + mainAxisAlignment: MainAxisAlignment.center, + crossAxisAlignment: CrossAxisAlignment.center, + children: [ + CakeImageWidget( + imageUrl: iconPath, width: 36, height: 36), + Text( + title, style: TextStyle( - fontSize: 12, - fontWeight: FontWeight.w400, - color: Theme.of(context).colorScheme.onSurfaceVariant), - textAlign: TextAlign.center, - )), - if(bottomWidget != null) ...[ - Padding(padding: EdgeInsets.symmetric(horizontal: 18), child: Container(height:1, color: Theme.of(context).colorScheme.surfaceContainerHigh),), - bottomWidget! - ] - ], - ), + fontSize: 16, + fontWeight: FontWeight.w500, + color: Theme.of(context).colorScheme.onSurface), + ), + Padding( + padding: EdgeInsets.symmetric(horizontal: 32), + child: Text( + message, + style: TextStyle( + fontSize: 12, + fontWeight: FontWeight.w400, + color: Theme.of(context).colorScheme.onSurfaceVariant), + textAlign: TextAlign.center, + )), + + ], + ), + ), + if (bottomWidget != null) ...[ + Padding( + padding: EdgeInsets.symmetric(horizontal: 18), + child: + Container(height: 1, color: Theme.of(context).colorScheme.surfaceContainerHigh), + ), + ClipRRect( + borderRadius: BorderRadius.vertical(bottom: Radius.circular(16)), + child: bottomWidget!) + ] + ], ), ); } diff --git a/lib/src/screens/nodes/widgets/node_list_row.dart b/lib/src/screens/nodes/widgets/node_list_row.dart index 5be027481..7020e3bd8 100644 --- a/lib/src/screens/nodes/widgets/node_list_row.dart +++ b/lib/src/screens/nodes/widgets/node_list_row.dart @@ -10,7 +10,10 @@ class NodeListRow extends StatelessWidget { required this.onTap, required this.onEditComplete, required this.isSelected, - required this.isPow, this.speed}); + required this.isPow, + this.speed, + this.vertical = 10.0, + this.horizontal = 12.0}); final Node node; final bool isPow; @@ -18,6 +21,8 @@ class NodeListRow extends StatelessWidget { final Future Function(Object?) onEditComplete; final bool isSelected; final NodeSpeed? speed; + final double vertical; + final double horizontal; @override Widget build(BuildContext context) { @@ -26,32 +31,34 @@ class NodeListRow extends StatelessWidget { final hasLabel = node.label != null && node.label!.isNotEmpty; final uriText = "${node.uri.host}:${node.uri.port}"; - return GestureDetector( - behavior: HitTestBehavior.opaque, - onTap: onTap, - child: Padding( - padding: const EdgeInsets.symmetric(vertical: 10.0, horizontal: 12), - child: Row( - spacing: 12, - mainAxisAlignment: MainAxisAlignment.spaceBetween, - children: [ - leading, - Expanded( - child: Column(crossAxisAlignment:CrossAxisAlignment.start,spacing:4,children: [ - Row( - spacing: 4, - mainAxisAlignment: MainAxisAlignment.start, - children: [ - Text(hasLabel ? node.label! : uriText, style: TextStyle(fontSize: 12),), - if(badgePath != null) - CakeImageWidget(imageUrl: badgePath, colorFilter: ColorFilter.mode(Theme.of(context).colorScheme.primary,BlendMode.srcIn),) - ], - ), - if(hasLabel) Text(uriText, style: TextStyle(fontSize: 12, color: Theme.of(context).colorScheme.onSurfaceVariant),), - ],), - ), - trailing, - ], + return Material( + color: Colors.transparent, + child: InkWell( + onTap: onTap, + child: Padding( + padding: EdgeInsets.symmetric(vertical: vertical, horizontal: horizontal), + child: Row( + spacing: 12, + mainAxisAlignment: MainAxisAlignment.spaceBetween, + children: [ + leading, + Expanded( + child: Column(crossAxisAlignment:CrossAxisAlignment.start,spacing:4,children: [ + Row( + spacing: 4, + mainAxisAlignment: MainAxisAlignment.start, + children: [ + Text(hasLabel ? node.label! : uriText, style: TextStyle(fontSize: 12),), + if(badgePath != null) + CakeImageWidget(imageUrl: badgePath, colorFilter: ColorFilter.mode(Theme.of(context).colorScheme.primary,BlendMode.srcIn),) + ], + ), + if(hasLabel) Text(uriText, style: TextStyle(fontSize: 12, color: Theme.of(context).colorScheme.onSurfaceVariant),), + ],), + ), + trailing, + ], + ), ), ), ); @@ -71,7 +78,14 @@ class NodeListRow extends StatelessWidget { Widget buildTrailing(BuildContext context) { return Row( children: [ - if (speed != null) CakeImageWidget(imageUrl: speed!.iconPath, width: 24, height: 24), + if (speed != null) + CakeImageWidget( + imageUrl: Theme.of(context).brightness == Brightness.dark + ? speed!.darkIconPath + : speed!.iconPath, + width: 24, + height: 24, + ), GestureDetector( behavior: HitTestBehavior.opaque, onTap: () async { @@ -80,7 +94,7 @@ class NodeListRow extends StatelessWidget { await onEditComplete(res); }, child: Padding( - padding: const EdgeInsets.symmetric(horizontal: 8.0), + padding: const EdgeInsets.only(right: 8.0, left: 12.0), child: CakeImageWidget( imageUrl: "assets/new-ui/3dots_vertical.svg", colorFilter: diff --git a/lib/src/screens/settings/connection_sync_page.dart b/lib/src/screens/settings/connection_sync_page.dart index 75d4d066e..123e81d0b 100644 --- a/lib/src/screens/settings/connection_sync_page.dart +++ b/lib/src/screens/settings/connection_sync_page.dart @@ -208,6 +208,12 @@ class ConnectionSyncPage extends BasePage { label: S.of(context).domain_looks_up, onTap: () => Navigator.of(context).pushNamed(Routes.domainLookupsPage) ), + if(_connectionSyncViewModel.hasRescan) + ListItemRegularRow( + keyValue: "rescan", + label: S.of(context).rescan, + onTap: ()=>Navigator.of(context).pushNamed(Routes.rescan) + ) ], } ) diff --git a/lib/src/screens/settings/manage_nodes_page.dart b/lib/src/screens/settings/manage_nodes_page.dart index 9f69c6587..75c384374 100644 --- a/lib/src/screens/settings/manage_nodes_page.dart +++ b/lib/src/screens/settings/manage_nodes_page.dart @@ -71,6 +71,8 @@ class _ManageNodesPageState extends State { title: S.of(context).nodes, bottomWidget: Observer( builder: (_) => NodeListRow( + // vertical: 0, + // horizontal: 0, node: widget.nodeListViewModel.currentNode, speed: widget.nodeListViewModel.nodeSpeedFor(widget.nodeListViewModel.currentNode), onEditComplete: (res)async{ @@ -90,63 +92,66 @@ class _ManageNodesPageState extends State { decoration: BoxDecoration( color: Theme.of(context).colorScheme.surfaceContainer, borderRadius: BorderRadius.circular(18)), - child: Observer( - builder: (BuildContext context) { - int itemsCount = widget.nodeListViewModel.nonCurrentNodes.length; - return ListView.separated( - controller: ModalScrollController.of(context), - shrinkWrap: true, - physics: BouncingScrollPhysics(), - itemCount: itemsCount, - separatorBuilder: (context, index) => Padding( - padding: EdgeInsets.symmetric(horizontal: 12), - child: Container( - height: 1, - color: Theme.of(context).colorScheme.surfaceContainerHigh, + child: ClipRRect( + borderRadius: BorderRadius.circular(18), + child: Observer( + builder: (BuildContext context) { + int itemsCount = widget.nodeListViewModel.nonCurrentNodes.length; + return ListView.separated( + controller: ModalScrollController.of(context), + shrinkWrap: true, + physics: BouncingScrollPhysics(), + itemCount: itemsCount, + separatorBuilder: (context, index) => Padding( + padding: EdgeInsets.symmetric(horizontal: 12), + child: Container( + height: 1, + color: Theme.of(context).colorScheme.surfaceContainerHigh, + ), ), - ), - itemBuilder: (_, index) { - return Observer( - builder: (context) { - final node = widget.nodeListViewModel.nonCurrentNodes[index]; - final nodeListRow = NodeListRow( - node: node, - isSelected: false, - isPow: widget.isPow, - speed: widget.nodeListViewModel.nodeSpeedFor(node), - onEditComplete: (res) async { - if(res != null && res is Node) { - widget.nodeListViewModel.nodes.removeWhere((item)=>item.id == res.id); - widget.nodeListViewModel.nodes.add(res); - } + itemBuilder: (_, index) { + return Observer( + builder: (context) { + final node = widget.nodeListViewModel.nonCurrentNodes[index]; + final nodeListRow = NodeListRow( + node: node, + isSelected: false, + isPow: widget.isPow, + speed: widget.nodeListViewModel.nodeSpeedFor(node), + onEditComplete: (res) async { + if(res != null && res is Node) { + widget.nodeListViewModel.nodes.removeWhere((item)=>item.id == res.id); + widget.nodeListViewModel.nodes.add(res); + } - }, - onTap: () async { - await showPopUp( - context: context, - builder: (BuildContext context) { - return AlertWithTwoActions( - alertTitle: S.of(context).change_current_node_title, - alertContent: - widget.nodeListViewModel.getAlertContent(node.uriRaw), - leftButtonText: S.of(context).cancel, - rightButtonText: S.of(context).change, - actionLeftButton: () => Navigator.of(context).pop(), - actionRightButton: () async { - await widget.nodeListViewModel.setAsCurrent(node); - Navigator.of(context).pop(); - }, - ); - }, - ); - }, - ); - return nodeListRow; - }, - ); - }, - ); - }, + }, + onTap: () async { + await showPopUp( + context: context, + builder: (BuildContext context) { + return AlertWithTwoActions( + alertTitle: S.of(context).change_current_node_title, + alertContent: + widget.nodeListViewModel.getAlertContent(node.uriRaw), + leftButtonText: S.of(context).cancel, + rightButtonText: S.of(context).change, + actionLeftButton: () => Navigator.of(context).pop(), + actionRightButton: () async { + await widget.nodeListViewModel.setAsCurrent(node); + Navigator.of(context).pop(); + }, + ); + }, + ); + }, + ); + return nodeListRow; + }, + ); + }, + ); + }, + ), ), ), ], diff --git a/lib/view_model/node_list/node_list_view_model.dart b/lib/view_model/node_list/node_list_view_model.dart index cc91577af..3350f57e8 100644 --- a/lib/view_model/node_list/node_list_view_model.dart +++ b/lib/view_model/node_list/node_list_view_model.dart @@ -19,20 +19,21 @@ part 'node_list_view_model.g.dart'; class NodeSpeed { final String iconPath; + final String darkIconPath; // fraction of best node ping needed to be classified as this speed. final double treshold; - const NodeSpeed._(this.iconPath, this.treshold); + const NodeSpeed._(this.iconPath, this.darkIconPath, this.treshold); static const disconnected = NodeSpeed._( - "assets/new-ui/node_speed_badges/disconnected.svg", 0); + "assets/new-ui/node_speed_badges/disconnected.svg", "assets/new-ui/node_speed_badges/disconnected-dark.svg", 0); static const slow = NodeSpeed._( - "assets/new-ui/node_speed_badges/slow.svg", 0); + "assets/new-ui/node_speed_badges/slow.svg", "assets/new-ui/node_speed_badges/slow-dark.svg", 0); static const medium = NodeSpeed._( - "assets/new-ui/node_speed_badges/medium.svg", 0.5); + "assets/new-ui/node_speed_badges/medium.svg", "assets/new-ui/node_speed_badges/medium.svg", 0.5); static const fast = NodeSpeed._( - "assets/new-ui/node_speed_badges/fast.svg", 0.8); + "assets/new-ui/node_speed_badges/fast.svg", "assets/new-ui/node_speed_badges/fast.svg", 0.8); static const all = [fast, medium, slow, disconnected]; } diff --git a/lib/view_model/settings/connection_sync_view_model.dart b/lib/view_model/settings/connection_sync_view_model.dart index 47f4be7f4..1d1fb30f1 100644 --- a/lib/view_model/settings/connection_sync_view_model.dart +++ b/lib/view_model/settings/connection_sync_view_model.dart @@ -162,6 +162,8 @@ abstract class ConnectionSyncViewModelBase with Store { @action void setUseBlinkProtection(bool value) => _settingsStore.useBlinkProtection = value; + bool get hasRescan => _wallet.hasRescan && _wallet.type != WalletType.bitcoin && _wallet.type != WalletType.litecoin; + @action void setUseEtherscan(bool value) { _settingsStore.useEtherscan = value; diff --git a/res/pictures/node_speed_badges/disconnected-dark.svg b/res/pictures/node_speed_badges/disconnected-dark.svg new file mode 100644 index 000000000..e1f20e94e --- /dev/null +++ b/res/pictures/node_speed_badges/disconnected-dark.svg @@ -0,0 +1,6 @@ + + + + + + diff --git a/res/pictures/node_speed_badges/disconnected.svg b/res/pictures/node_speed_badges/disconnected.svg index 33b7d28ba..03f001b5d 100644 --- a/res/pictures/node_speed_badges/disconnected.svg +++ b/res/pictures/node_speed_badges/disconnected.svg @@ -1,4 +1,6 @@ - - + + + + diff --git a/res/pictures/node_speed_badges/fast.svg b/res/pictures/node_speed_badges/fast.svg index 4205def6f..d7d1e8277 100644 --- a/res/pictures/node_speed_badges/fast.svg +++ b/res/pictures/node_speed_badges/fast.svg @@ -1,3 +1,3 @@ - + diff --git a/res/pictures/node_speed_badges/medium.svg b/res/pictures/node_speed_badges/medium.svg index 398280251..9de715bf5 100644 --- a/res/pictures/node_speed_badges/medium.svg +++ b/res/pictures/node_speed_badges/medium.svg @@ -1,4 +1,4 @@ - - + + diff --git a/res/pictures/node_speed_badges/slow-dark.svg b/res/pictures/node_speed_badges/slow-dark.svg new file mode 100644 index 000000000..5f8505073 --- /dev/null +++ b/res/pictures/node_speed_badges/slow-dark.svg @@ -0,0 +1,7 @@ + + + + + + + diff --git a/res/pictures/node_speed_badges/slow.svg b/res/pictures/node_speed_badges/slow.svg index fc4d0b200..b51c980a6 100644 --- a/res/pictures/node_speed_badges/slow.svg +++ b/res/pictures/node_speed_badges/slow.svg @@ -1,7 +1,7 @@ - - - - - + + + + + From 1000e9e4621f59889ccf0481384a806338452493 Mon Sep 17 00:00:00 2001 From: Konstantin Ullrich Date: Tue, 2 Jun 2026 16:10:59 +0200 Subject: [PATCH 4/6] feat: add wallet illustration SVG to resources (#3278) --- res/pictures/wallet.svg | 117 ++++++++++++++++++++++++++++++++++++++++ 1 file changed, 117 insertions(+) create mode 100644 res/pictures/wallet.svg diff --git a/res/pictures/wallet.svg b/res/pictures/wallet.svg new file mode 100644 index 000000000..7f7a0b4c9 --- /dev/null +++ b/res/pictures/wallet.svg @@ -0,0 +1,117 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + From 371c063bc6ff02ea4b57598437bc609f24d543d7 Mon Sep 17 00:00:00 2001 From: malik1004x Date: Tue, 2 Jun 2026 16:55:54 +0200 Subject: [PATCH 5/6] fix naming on wallet type page (#3279) * fix naming on wallet type page * add long press copy to tx history amount --- cw_core/lib/wallet_type.dart | 89 ++++++++++--------- cw_monero/pubspec.lock | 8 +- .../transaction_details_modal.dart | 15 +++- lib/new-ui/widgets/copy_wrapper.dart | 5 +- .../new_wallet/new_wallet_type_page.dart | 6 +- 5 files changed, 68 insertions(+), 55 deletions(-) diff --git a/cw_core/lib/wallet_type.dart b/cw_core/lib/wallet_type.dart index 10a472d60..7ef16d8ae 100644 --- a/cw_core/lib/wallet_type.dart +++ b/cw_core/lib/wallet_type.dart @@ -238,50 +238,51 @@ String walletTypeToString(WalletType type) { } } -String walletTypeToDisplayName(WalletType type) { - switch (type) { - case WalletType.monero: - return 'Monero (XMR)'; - case WalletType.bitcoin: - return 'Bitcoin (BTC)'; - case WalletType.litecoin: - return 'Litecoin (LTC)'; - case WalletType.haven: - return 'Haven (XHV)'; - case WalletType.ethereum: - return 'Ethereum (ETH)'; - case WalletType.bitcoinCash: - return 'Bitcoin Cash (BCH)'; - case WalletType.nano: - return 'Nano (XNO)'; - case WalletType.banano: - return 'Banano (BAN)'; - case WalletType.polygon: - return 'Polygon (POL)'; - case WalletType.solana: - return 'Solana (SOL)'; - case WalletType.tron: - return 'Tron (TRX)'; - case WalletType.wownero: - return 'Wownero (WOW)'; - case WalletType.zano: - return 'Zano (ZANO)'; - case WalletType.decred: - return 'Decred (DCR)'; - case WalletType.dogecoin: - return 'Dogecoin (DOGE)'; - case WalletType.base: - return 'Base'; - case WalletType.arbitrum: - return 'Arbitrum (ARB)'; - case WalletType.zcash: - return 'Zcash (ZEC)'; - case WalletType.bsc: - return 'BNB Smart Chain (BNB)'; - case WalletType.none: - return ''; - } -} +String walletTypeToDisplayName(WalletType type) => switch (type) { + WalletType.monero => 'Monero', + WalletType.bitcoin => 'Bitcoin', + WalletType.litecoin => 'Litecoin', + WalletType.haven => 'Haven', + WalletType.ethereum => 'Ethereum', + WalletType.bitcoinCash => 'Bitcoin Cash', + WalletType.nano => 'Nano', + WalletType.banano => 'Banano', + WalletType.polygon => 'Polygon', + WalletType.solana => 'Solana', + WalletType.tron => 'Tron', + WalletType.wownero => 'Wownero', + WalletType.zano => 'Zano', + WalletType.decred => 'Decred', + WalletType.dogecoin => 'Dogecoin', + WalletType.base => 'Base', + WalletType.arbitrum => 'Arbitrum', + WalletType.zcash => 'Zcash', + WalletType.bsc => 'BNB Smart Chain', + WalletType.none => '' + }; + +String walletTypeToDisplayTicker(WalletType type) => switch (type) { + WalletType.monero => 'XMR', + WalletType.bitcoin => 'BTC', + WalletType.litecoin => 'LTC', + WalletType.haven => 'XHV', + WalletType.ethereum => 'ETH', + WalletType.bitcoinCash => 'BCH', + WalletType.nano => 'XNO', + WalletType.banano => 'BAN', + WalletType.polygon => 'POL', + WalletType.solana => 'SOL', + WalletType.tron => 'TRX', + WalletType.wownero => 'WOW', + WalletType.zano => 'ZANO', + WalletType.decred => 'DCR', + WalletType.dogecoin => 'DOGE', + WalletType.base => '', + WalletType.arbitrum => 'ARB', + WalletType.zcash => 'ZEC', + WalletType.bsc => 'BNB', + WalletType.none => '' + }; WalletType? _cryptoCurrencyToWalletType(CryptoCurrency type) { switch (type) { diff --git a/cw_monero/pubspec.lock b/cw_monero/pubspec.lock index fc33c6fe8..2cd06b9d4 100644 --- a/cw_monero/pubspec.lock +++ b/cw_monero/pubspec.lock @@ -982,8 +982,8 @@ packages: dependency: "direct main" description: path: trezor-flutter - ref: "4bf54339a1caefd4c53a4a8873a9686ec13a9107" - resolved-ref: "4bf54339a1caefd4c53a4a8873a9686ec13a9107" + ref: becd18ac474d343d94b6191d89fad43270d2a02e + resolved-ref: becd18ac474d343d94b6191d89fad43270d2a02e url: "https://github.com/cake-tech/trezor-flutter.git" source: git version: "0.1.0" @@ -991,8 +991,8 @@ packages: dependency: transitive description: path: trezor_usb_transport - ref: "4bf54339a1caefd4c53a4a8873a9686ec13a9107" - resolved-ref: "4bf54339a1caefd4c53a4a8873a9686ec13a9107" + ref: becd18ac474d343d94b6191d89fad43270d2a02e + resolved-ref: becd18ac474d343d94b6191d89fad43270d2a02e url: "https://github.com/cake-tech/trezor-flutter.git" source: git version: "0.0.1" diff --git a/lib/new-ui/widgets/coins_page/assets_history/transaction_details_modal.dart b/lib/new-ui/widgets/coins_page/assets_history/transaction_details_modal.dart index 2eb692057..d81db4ac2 100644 --- a/lib/new-ui/widgets/coins_page/assets_history/transaction_details_modal.dart +++ b/lib/new-ui/widgets/coins_page/assets_history/transaction_details_modal.dart @@ -1,6 +1,7 @@ import 'package:cake_wallet/entities/new_ui_entities/list_item/list_item.dart'; import 'package:cake_wallet/entities/new_ui_entities/list_item/list_item_regular_row.dart'; import 'package:cake_wallet/generated/i18n.dart'; +import 'package:cake_wallet/new-ui/widgets/copy_wrapper.dart'; import 'package:cake_wallet/new-ui/widgets/receive_page/receive_top_bar.dart'; import 'package:cake_wallet/routes.dart'; import 'package:cake_wallet/src/screens/transaction_details/confirmations_list_item.dart'; @@ -81,9 +82,17 @@ class _TransactionDetailsModalState extends State { widget.transactionDetailsViewModel.formattedStatus, style: TextStyle(fontSize: 20, fontWeight: FontWeight.w500), ), - Text( - widget.transactionDetailsViewModel.formattedCryptoAmount, - style: TextStyle(fontSize: 28), + CopyWrapper( + requireLongPress: true, + data: ClipboardData(text: widget.transactionDetailsViewModel.formattedCryptoAmount), + builder: (context, copied)=> AnimatedSwitcher( + duration: Duration(milliseconds: 300), + child: Text( + key: ValueKey(copied), + copied ? S.of(context).copied : widget.transactionDetailsViewModel.formattedCryptoAmount, + style: TextStyle(fontSize: 28, color: copied ? Theme.of(context).colorScheme.primary : Theme.of(context).colorScheme.onSurface), + ), + ), ), Padding( padding: const EdgeInsets.all(16.0), diff --git a/lib/new-ui/widgets/copy_wrapper.dart b/lib/new-ui/widgets/copy_wrapper.dart index 83ed13a47..587930664 100644 --- a/lib/new-ui/widgets/copy_wrapper.dart +++ b/lib/new-ui/widgets/copy_wrapper.dart @@ -9,12 +9,14 @@ class CopyWrapper extends StatefulWidget { const CopyWrapper( {super.key, this.data, + this.requireLongPress = false, this.isSensitive = false, required this.builder, this.duration = const Duration(milliseconds: 1200)}); final ClipboardData? data; final bool isSensitive; + final bool requireLongPress; final Widget Function(BuildContext, bool) builder; final Duration duration; @@ -40,7 +42,8 @@ class _CopyWrapperState extends State { Widget build(BuildContext context) { return GestureDetector( behavior: HitTestBehavior.translucent, - onTap: handleCopy, + onTap: widget.requireLongPress ? null : handleCopy, + onLongPress: !widget.requireLongPress ? null : handleCopy, child: widget.builder(context, copied), ); } diff --git a/lib/src/screens/new_wallet/new_wallet_type_page.dart b/lib/src/screens/new_wallet/new_wallet_type_page.dart index dee66e95b..7bcf3edf5 100644 --- a/lib/src/screens/new_wallet/new_wallet_type_page.dart +++ b/lib/src/screens/new_wallet/new_wallet_type_page.dart @@ -137,7 +137,7 @@ class WalletTypeFormState extends State { ), Flexible( child: Padding( - padding: const EdgeInsets.symmetric(horizontal: 18), + padding: const EdgeInsets.only(left: 18, right: 18, bottom: 12), child: Container( decoration: BoxDecoration( color: Theme.of(context).colorScheme.surfaceContainer, @@ -172,10 +172,10 @@ class WalletTypeFormState extends State { imageUrl: curr.iconPath, ), const SizedBox(width: 12), - Text(curr.fullName ?? curr.name), + Text(walletTypeToDisplayName(item)), const SizedBox(width: 4), Text( - curr.title, + walletTypeToDisplayTicker(item), style: TextStyle( color: Theme.of(context).colorScheme.onSurfaceVariant, ), From b8cb5dacc987290d6f7dcf308157c1862fb0cded Mon Sep 17 00:00:00 2001 From: Konstantin Ullrich Date: Tue, 2 Jun 2026 16:58:00 +0200 Subject: [PATCH 6/6] chore: upgrade trezor_flutter (#3280) --- cw_monero/pubspec.yaml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/cw_monero/pubspec.yaml b/cw_monero/pubspec.yaml index 06d0e56c4..516464d36 100644 --- a/cw_monero/pubspec.yaml +++ b/cw_monero/pubspec.yaml @@ -33,7 +33,7 @@ dependencies: trezor_flutter: git: url: https://github.com/cake-tech/trezor-flutter.git - ref: becd18ac474d343d94b6191d89fad43270d2a02e + ref: d1289dfa4247a93ee57342dfd249957b339915ef path: trezor-flutter dev_dependencies: