From b2850c203f319a37d7888465a46b83d951383156 Mon Sep 17 00:00:00 2001 From: David Adegoke <64401859+Blazebrain@users.noreply.github.com> Date: Fri, 27 Sep 2024 23:36:56 +0100 Subject: [PATCH] feat: Add UI signifying the currently selected wallet indicator (#1704) * feat: Add UI signifying the currently selected wallet indicator * fix: Product Fix - Add more padding to child wallets list item tile in grouped wallets, fix sort by dragging for general single wallets, and also groups, add animation to trailing arrow icon when tile is expanded or not * Update wallet group image and change maxLines --------- Co-authored-by: tuxpizza --- assets/images/wallet_group.png | Bin 5053 -> 0 bytes assets/images/wallet_group_bright.png | Bin 0 -> 10698 bytes assets/images/wallet_group_dark.png | Bin 0 -> 7100 bytes assets/images/wallet_group_light.png | Bin 0 -> 7193 bytes .../wallet_group_description_page.dart | 19 +++-- .../new_wallet/wallet_group_display_page.dart | 1 + .../grouped_wallet_expansion_tile.dart | 47 +++++++++++-- .../edit_wallet_button_widget.dart | 4 +- .../screens/wallet_list/wallet_list_page.dart | 66 +++++++++++++++--- .../wallet_list/wallet_list_view_model.dart | 33 ++++++++- 10 files changed, 144 insertions(+), 26 deletions(-) delete mode 100644 assets/images/wallet_group.png create mode 100644 assets/images/wallet_group_bright.png create mode 100644 assets/images/wallet_group_dark.png create mode 100644 assets/images/wallet_group_light.png diff --git a/assets/images/wallet_group.png b/assets/images/wallet_group.png deleted file mode 100644 index f4a577b22a05a172de08fc32b178dc3317047526..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 5053 zcmai2g;Nv`(?&oAjt(8WI8-=jXlQtHvXbimbozh9dht)X8t;7jr?4Gl^_
|GG>K1DW2bVv_sRl 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 B*q8tS diff --git a/assets/images/wallet_group_bright.png b/assets/images/wallet_group_bright.png new file mode 100644 index 0000000000000000000000000000000000000000..263361db63617eaf4b9bd5a1379e5605126bd970 GIT binary patch literal 10698 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 Fe*nBVZlnMJ literal 0 HcmV?d00001 diff --git a/assets/images/wallet_group_dark.png b/assets/images/wallet_group_dark.png new file mode 100644 index 0000000000000000000000000000000000000000..7cd08d2cd9c0c6f6c4522dec292c005aecf47771 GIT binary patch literal 7100 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 literal 0 HcmV?d00001 diff --git a/assets/images/wallet_group_light.png b/assets/images/wallet_group_light.png new file mode 100644 index 0000000000000000000000000000000000000000..7827971e7d250b226189ce7e30021157c4b0fa92 GIT binary patch literal 7193 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 ZNT;ZX*43|#EmSnn2i*5R+3Wx7e*t#8Re1ma literal 0 HcmV?d00001 diff --git a/lib/src/screens/new_wallet/wallet_group_description_page.dart b/lib/src/screens/new_wallet/wallet_group_description_page.dart index eb3501bed..f30ff1d6c 100644 --- a/lib/src/screens/new_wallet/wallet_group_description_page.dart +++ b/lib/src/screens/new_wallet/wallet_group_description_page.dart @@ -3,10 +3,11 @@ import 'package:cake_wallet/src/widgets/primary_button.dart'; import 'package:cake_wallet/themes/extensions/cake_text_theme.dart'; import 'package:cw_core/wallet_type.dart'; import 'package:flutter/material.dart'; - +import 'package:cake_wallet/themes/theme_base.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:flutter_svg/svg.dart'; class WalletGroupDescriptionPage extends BasePage { WalletGroupDescriptionPage({required this.selectedWalletType}); @@ -16,17 +17,25 @@ class WalletGroupDescriptionPage extends BasePage { @override String get title => S.current.wallet_group; + @override Widget body(BuildContext context) { + + final lightImage = 'assets/images/wallet_group_light.png'; + final darkImage = 'assets/images/wallet_group_dark.png'; + final brightImage = 'assets/images/wallet_group_bright.png'; + + final image = currentTheme.type == ThemeType.light ? lightImage : darkImage; + return Container( alignment: Alignment.center, padding: EdgeInsets.all(24), child: Column( children: [ - Image.asset( - 'assets/images/wallet_group.png', - scale: 0.8, - ), + Image.asset( + image, + height: 200 + ), SizedBox(height: 32), Expanded( child: Text.rich( diff --git a/lib/src/screens/new_wallet/wallet_group_display_page.dart b/lib/src/screens/new_wallet/wallet_group_display_page.dart index 67dde506e..d3ce27446 100644 --- a/lib/src/screens/new_wallet/wallet_group_display_page.dart +++ b/lib/src/screens/new_wallet/wallet_group_display_page.dart @@ -58,6 +58,7 @@ class WalletGroupsDisplayBody extends StatelessWidget { final groupName = group.groupName ?? '${S.of(context).wallet_group} ${index + 1}'; return GroupedWalletExpansionTile( + shouldShowCurrentWalletPointer: false, leadingWidget: Icon(Icons.account_balance_wallet_outlined, size: 28), borderRadius: BorderRadius.all(Radius.circular(16)), diff --git a/lib/src/screens/new_wallet/widgets/grouped_wallet_expansion_tile.dart b/lib/src/screens/new_wallet/widgets/grouped_wallet_expansion_tile.dart index 52e2e74b0..57f6a9047 100644 --- a/lib/src/screens/new_wallet/widgets/grouped_wallet_expansion_tile.dart +++ b/lib/src/screens/new_wallet/widgets/grouped_wallet_expansion_tile.dart @@ -12,6 +12,7 @@ class GroupedWalletExpansionTile extends StatelessWidget { this.childWallets = const [], this.onTitleTapped, this.onChildItemTapped = _defaultVoidCallback, + this.onExpansionChanged, this.leadingWidget, this.trailingWidget, this.childTrailingWidget, @@ -22,13 +23,18 @@ class GroupedWalletExpansionTile extends StatelessWidget { this.borderRadius, this.margin, this.tileKey, + this.isCurrentlySelectedWallet = false, + this.shouldShowCurrentWalletPointer = false, }) : super(key: tileKey); final Key? tileKey; final bool isSelected; + final bool isCurrentlySelectedWallet; + final bool shouldShowCurrentWalletPointer; final VoidCallback? onTitleTapped; final void Function(WalletListItem item) onChildItemTapped; + final void Function(bool)? onExpansionChanged; final String title; final Widget? leadingWidget; @@ -70,8 +76,10 @@ class GroupedWalletExpansionTile extends StatelessWidget { splashFactory: NoSplash.splashFactory, ), child: ExpansionTile( + onExpansionChanged: onExpansionChanged, key: tileKey, - tilePadding: EdgeInsets.symmetric(vertical: 1, horizontal: 16), + tilePadding: + EdgeInsets.symmetric(vertical: 1, horizontal: !isCurrentlySelectedWallet ? 16 : 0), iconColor: effectiveArrowColor, collapsedIconColor: effectiveArrowColor, leading: leadingWidget, @@ -90,19 +98,46 @@ class GroupedWalletExpansionTile extends StatelessWidget { ), children: childWallets.map( (item) { + final currentColor = item.isCurrent + ? Theme.of(context) + .extension()! + .createNewWalletButtonBackgroundColor + : Theme.of(context).colorScheme.background; final walletTypeToCrypto = walletTypeToCryptoCurrency(item.type); return ListTile( + contentPadding: EdgeInsets.zero, key: ValueKey(item.name), trailing: childTrailingWidget?.call(item), onTap: () => onChildItemTapped(item), - leading: Image.asset( - walletTypeToCrypto.iconPath!, - width: 32, - height: 32, + leading: SizedBox( + width: 60, + child: Row( + children: [ + item.isCurrent && shouldShowCurrentWalletPointer + ? Container( + height: 35, + width: 6, + decoration: BoxDecoration( + borderRadius: BorderRadius.only( + topRight: Radius.circular(16), + bottomRight: Radius.circular(16), + ), + color: currentColor, + ), + ) + : SizedBox(width: 6), + SizedBox(width: 16), + Image.asset( + walletTypeToCrypto.iconPath!, + width: 32, + height: 32, + ), + ], + ), ), title: Text( item.name, - maxLines: 1, + maxLines: 2, style: TextStyle( fontSize: 18, fontWeight: FontWeight.w500, diff --git a/lib/src/screens/wallet_list/edit_wallet_button_widget.dart b/lib/src/screens/wallet_list/edit_wallet_button_widget.dart index 8f858348a..fd6f1a0ee 100644 --- a/lib/src/screens/wallet_list/edit_wallet_button_widget.dart +++ b/lib/src/screens/wallet_list/edit_wallet_button_widget.dart @@ -7,11 +7,13 @@ class EditWalletButtonWidget extends StatelessWidget { required this.width, required this.onTap, this.isGroup = false, + this.isExpanded = false, super.key, }); final bool isGroup; final double width; + final bool isExpanded; final VoidCallback onTap; @override @@ -42,7 +44,7 @@ class EditWalletButtonWidget extends StatelessWidget { if (isGroup) ...{ SizedBox(width: 6), Icon( - Icons.keyboard_arrow_down, + isExpanded ? Icons.keyboard_arrow_up : Icons.keyboard_arrow_down, size: 24, color: Theme.of(context).extension()!.titlesColor, ), diff --git a/lib/src/screens/wallet_list/wallet_list_page.dart b/lib/src/screens/wallet_list/wallet_list_page.dart index 9c210d8eb..8bb9593c9 100644 --- a/lib/src/screens/wallet_list/wallet_list_page.dart +++ b/lib/src/screens/wallet_list/wallet_list_page.dart @@ -11,6 +11,7 @@ import 'package:cake_wallet/themes/extensions/cake_text_theme.dart'; import 'package:cake_wallet/src/screens/auth/auth_page.dart'; import 'package:cake_wallet/core/auth_service.dart'; import 'package:cake_wallet/themes/extensions/filter_theme.dart'; +import 'package:cake_wallet/themes/extensions/wallet_list_theme.dart'; import 'package:cake_wallet/utils/responsive_layout_util.dart'; import 'package:cake_wallet/utils/show_bar.dart'; import 'package:cake_wallet/utils/show_pop_up.dart'; @@ -156,7 +157,18 @@ class WalletListBodyState extends State { final group = widget.walletListViewModel.multiWalletGroups[index]; final groupName = group.groupName ?? '${S.current.wallet_group} ${index + 1}'; + + widget.walletListViewModel.updateTileState( + index, + widget.walletListViewModel.expansionTileStateTrack[index] ?? false, + ); + return GroupedWalletExpansionTile( + onExpansionChanged: (value) { + widget.walletListViewModel.updateTileState(index, value); + setState(() {}); + }, + shouldShowCurrentWalletPointer: true, borderRadius: BorderRadius.all(Radius.circular(16)), margin: EdgeInsets.only(left: 20, right: 20, bottom: 12), title: groupName, @@ -168,6 +180,8 @@ class WalletListBodyState extends State { trailingWidget: EditWalletButtonWidget( width: 74, isGroup: true, + isExpanded: + widget.walletListViewModel.expansionTileStateTrack[index]!, onTap: () { final wallet = widget.walletListViewModel .convertWalletInfoToWalletListItem(group.wallets.first); @@ -193,13 +207,16 @@ class WalletListBodyState extends State { childTrailingWidget: (item) { return item.isCurrent ? SizedBox.shrink() - : EditWalletButtonWidget( - width: 44, - onTap: () => Navigator.of(context).pushNamed( - Routes.walletEdit, - arguments: WalletEditPageArguments( - walletListViewModel: widget.walletListViewModel, - editingWallet: item, + : Padding( + padding: const EdgeInsets.only(right: 16), + child: EditWalletButtonWidget( + width: 44, + onTap: () => Navigator.of(context).pushNamed( + Routes.walletEdit, + arguments: WalletEditPageArguments( + walletListViewModel: widget.walletListViewModel, + editingWallet: item, + ), ), ), ); @@ -232,13 +249,40 @@ class WalletListBodyState extends State { updateFunction: widget.walletListViewModel.reorderAccordingToWalletList, itemBuilder: (context, index) { final wallet = widget.walletListViewModel.singleWalletsList[index]; + final currentColor = wallet.isCurrent + ? Theme.of(context) + .extension()! + .createNewWalletButtonBackgroundColor + : Theme.of(context).colorScheme.background; return GroupedWalletExpansionTile( tileKey: ValueKey('single_wallets_expansion_tile_widget_$index'), - leadingWidget: Image.asset( - walletTypeToCryptoCurrency(wallet.type).iconPath!, - width: 32, - height: 32, + isCurrentlySelectedWallet: wallet.isCurrent, + leadingWidget: SizedBox( + width: 60, + child: Row( + children: [ + wallet.isCurrent + ? Container( + height: 35, + width: 6, + margin: EdgeInsets.only(right: 16), + decoration: BoxDecoration( + borderRadius: BorderRadius.only( + topRight: Radius.circular(16), + bottomRight: Radius.circular(16), + ), + color: currentColor, + ), + ) + : SizedBox(width: 6), + Image.asset( + walletTypeToCryptoCurrency(wallet.type).iconPath!, + width: 32, + height: 32, + ), + ], + ), ), title: wallet.name, isSelected: false, diff --git a/lib/view_model/wallet_list/wallet_list_view_model.dart b/lib/view_model/wallet_list/wallet_list_view_model.dart index 539f5c640..4a4fdcb19 100644 --- a/lib/view_model/wallet_list/wallet_list_view_model.dart +++ b/lib/view_model/wallet_list/wallet_list_view_model.dart @@ -22,7 +22,8 @@ abstract class WalletListViewModelBase with Store { this._walletManager, ) : wallets = ObservableList(), multiWalletGroups = ObservableList(), - singleWalletsList = ObservableList() { + singleWalletsList = ObservableList(), + expansionTileStateTrack = ObservableMap() { setOrderType(_appStore.settingsStore.walletListOrder); reaction((_) => _appStore.wallet, (_) => updateList()); updateList(); @@ -40,6 +41,18 @@ abstract class WalletListViewModelBase with Store { @observable ObservableList singleWalletsList; + @observable + ObservableMap expansionTileStateTrack; + + @action + void updateTileState(int index, bool isExpanded) { + if (expansionTileStateTrack.containsKey(index)) { + expansionTileStateTrack.update(index, (value) => isExpanded); + } else { + expansionTileStateTrack.addEntries({index: isExpanded}.entries); + } + } + @computed bool get shouldRequireTOTP2FAForAccessingWallet => _appStore.settingsStore.shouldRequireTOTP2FAForAccessingWallet; @@ -100,8 +113,8 @@ abstract class WalletListViewModelBase with Store { // delete all wallets from walletInfoSource: await _walletInfoSource.clear(); - // add wallets from wallets list in order of wallets list, by name: - for (WalletListItem wallet in wallets) { + // Reorder single wallets using the singleWalletsList + for (WalletListItem wallet in singleWalletsList) { for (int i = 0; i < walletInfoSourceCopy.length; i++) { if (walletInfoSourceCopy[i].name == wallet.name) { await _walletInfoSource.add(walletInfoSourceCopy[i]); @@ -111,6 +124,20 @@ abstract class WalletListViewModelBase with Store { } } + // Reorder wallets within multi-wallet groups + for (WalletGroup group in multiWalletGroups) { + for (WalletInfo walletInfo in group.wallets) { + for (int i = 0; i < walletInfoSourceCopy.length; i++) { + if (walletInfoSourceCopy[i].name == walletInfo.name) { + await _walletInfoSource.add(walletInfoSourceCopy[i]); + walletInfoSourceCopy.removeAt(i); + break; + } + } + } + } + + // Rebuild the list of wallets and groups updateList(); }