From 501485d0b15d21df41faee12ce7478d17ca4e692 Mon Sep 17 00:00:00 2001 From: Alex <alex.tran1502@gmail.com> Date: Fri, 9 Aug 2024 09:51:08 -0500 Subject: [PATCH] fix(mobile): incorrect remove action from the album assets detail view (#11671) * fix(mobile): incorrect remove action from the album assets detail view * better data structure --- .../asset_viewer/bottom_gallery_bar.dart | 132 +++++++++--------- 1 file changed, 67 insertions(+), 65 deletions(-) diff --git a/mobile/lib/widgets/asset_viewer/bottom_gallery_bar.dart b/mobile/lib/widgets/asset_viewer/bottom_gallery_bar.dart index 45867ad11d..d78b10270e 100644 --- a/mobile/lib/widgets/asset_viewer/bottom_gallery_bar.dart +++ b/mobile/lib/widgets/asset_viewer/bottom_gallery_bar.dart @@ -61,58 +61,6 @@ class BottomGalleryBar extends ConsumerWidget { navStack.length > 2 && navStack.elementAt(navStack.length - 2).name == TrashRoute.name; final isInAlbum = ref.watch(currentAlbumProvider)?.isRemote ?? false; - // !!!! itemsList and actionlist should always be in sync - final itemsList = [ - BottomNavigationBarItem( - icon: Icon( - Platform.isAndroid ? Icons.share_rounded : Icons.ios_share_rounded, - ), - label: 'control_bottom_app_bar_share'.tr(), - tooltip: 'control_bottom_app_bar_share'.tr(), - ), - if (asset.isImage) - BottomNavigationBarItem( - icon: const Icon(Icons.tune_outlined), - label: 'control_bottom_app_bar_edit'.tr(), - tooltip: 'control_bottom_app_bar_edit'.tr(), - ), - if (isOwner) - asset.isArchived - ? BottomNavigationBarItem( - icon: const Icon(Icons.unarchive_rounded), - label: 'control_bottom_app_bar_unarchive'.tr(), - tooltip: 'control_bottom_app_bar_unarchive'.tr(), - ) - : BottomNavigationBarItem( - icon: const Icon(Icons.archive_outlined), - label: 'control_bottom_app_bar_archive'.tr(), - tooltip: 'control_bottom_app_bar_archive'.tr(), - ), - if (isOwner && stack.isNotEmpty) - BottomNavigationBarItem( - icon: const Icon(Icons.burst_mode_outlined), - label: 'control_bottom_app_bar_stack'.tr(), - tooltip: 'control_bottom_app_bar_stack'.tr(), - ), - if (isOwner && !isInAlbum) - BottomNavigationBarItem( - icon: const Icon(Icons.delete_outline), - label: 'control_bottom_app_bar_delete'.tr(), - tooltip: 'control_bottom_app_bar_delete'.tr(), - ), - if (!isOwner) - BottomNavigationBarItem( - icon: const Icon(Icons.download_outlined), - label: 'download'.tr(), - tooltip: 'download'.tr(), - ), - if (isInAlbum) - BottomNavigationBarItem( - icon: const Icon(Icons.remove_circle_outline), - label: 'album_viewer_appbar_share_remove'.tr(), - tooltip: 'album_viewer_appbar_share_remove'.tr(), - ), - ]; void removeAssetFromStack() { if (stackIndex > 0 && showStack) { @@ -366,16 +314,71 @@ class BottomGalleryBar extends ConsumerWidget { } } - List<Function(int)> actionslist = [ - (_) => shareAsset(), - if (asset.isImage) (_) => handleEdit(), - if (isOwner) (_) => handleArchive(), - if (isOwner && stack.isNotEmpty) (_) => showStackActionItems(), - if (isOwner) (_) => handleDelete(), - if (!isOwner) (_) => handleDownload(), - if (isInAlbum) (_) => handleRemoveFromAlbum(), + final List<Map<BottomNavigationBarItem, Function(int)>> albumActions = [ + { + BottomNavigationBarItem( + icon: Icon( + Platform.isAndroid ? Icons.share_rounded : Icons.ios_share_rounded, + ), + label: 'control_bottom_app_bar_share'.tr(), + tooltip: 'control_bottom_app_bar_share'.tr(), + ): (_) => shareAsset(), + }, + if (asset.isImage) + { + BottomNavigationBarItem( + icon: const Icon(Icons.tune_outlined), + label: 'control_bottom_app_bar_edit'.tr(), + tooltip: 'control_bottom_app_bar_edit'.tr(), + ): (_) => handleEdit(), + }, + if (isOwner) + { + asset.isArchived + ? BottomNavigationBarItem( + icon: const Icon(Icons.unarchive_rounded), + label: 'control_bottom_app_bar_unarchive'.tr(), + tooltip: 'control_bottom_app_bar_unarchive'.tr(), + ) + : BottomNavigationBarItem( + icon: const Icon(Icons.archive_outlined), + label: 'control_bottom_app_bar_archive'.tr(), + tooltip: 'control_bottom_app_bar_archive'.tr(), + ): (_) => handleArchive(), + }, + if (isOwner && stack.isNotEmpty) + { + BottomNavigationBarItem( + icon: const Icon(Icons.burst_mode_outlined), + label: 'control_bottom_app_bar_stack'.tr(), + tooltip: 'control_bottom_app_bar_stack'.tr(), + ): (_) => showStackActionItems(), + }, + if (isOwner && !isInAlbum) + { + BottomNavigationBarItem( + icon: const Icon(Icons.delete_outline), + label: 'control_bottom_app_bar_delete'.tr(), + tooltip: 'control_bottom_app_bar_delete'.tr(), + ): (_) => handleDelete(), + }, + if (!isOwner) + { + BottomNavigationBarItem( + icon: const Icon(Icons.download_outlined), + label: 'download'.tr(), + tooltip: 'download'.tr(), + ): (_) => handleDownload(), + }, + if (isInAlbum) + { + BottomNavigationBarItem( + icon: const Icon(Icons.remove_circle_outline), + label: 'album_viewer_appbar_share_remove'.tr(), + tooltip: 'album_viewer_appbar_share_remove'.tr(), + ): (_) => handleRemoveFromAlbum(), + }, ]; - return IgnorePointer( ignoring: !ref.watch(showControlsProvider), child: AnimatedOpacity( @@ -407,11 +410,10 @@ class BottomGalleryBar extends ConsumerWidget { unselectedItemColor: Colors.white, showSelectedLabels: true, showUnselectedLabels: true, - items: itemsList, + items: + albumActions.map((e) => e.keys.first).toList(growable: false), onTap: (index) { - if (index < actionslist.length) { - actionslist[index].call(index); - } + albumActions[index].values.first.call(index); }, ), ],