diff --git a/lib/features/base/model/popup_menu_item_action.dart b/lib/features/base/model/popup_menu_item_action.dart index 64d1e6673..feabf2200 100644 --- a/lib/features/base/model/popup_menu_item_action.dart +++ b/lib/features/base/model/popup_menu_item_action.dart @@ -56,3 +56,14 @@ abstract class PopupMenuItemActionRequiredFull extends PopupMenuItemAction PopupMenuItemActionRequiredFull(super.action, this.selectedAction); } + +abstract class PopupMenuItemActionRequiredIconWithMultipleSelected + extends PopupMenuItemAction + with OptionalPopupIcon, OptionalPopupSelectedIcon { + final List selectedActions; + + PopupMenuItemActionRequiredIconWithMultipleSelected( + super.action, + this.selectedActions, + ); +} diff --git a/lib/features/base/widget/popup_menu/popup_menu_item_action_widget.dart b/lib/features/base/widget/popup_menu/popup_menu_item_action_widget.dart index 4b15ba5f3..281534d1d 100644 --- a/lib/features/base/widget/popup_menu/popup_menu_item_action_widget.dart +++ b/lib/features/base/widget/popup_menu/popup_menu_item_action_widget.dart @@ -34,7 +34,8 @@ class PopupMenuItemActionWidget extends StatelessWidget { ), ); } else if (menuAction is PopupMenuItemActionRequiredSelectedIcon) { - final specificMenuAction = menuAction as PopupMenuItemActionRequiredSelectedIcon; + final specificMenuAction = + menuAction as PopupMenuItemActionRequiredSelectedIcon; selectedIconWidget = Padding( padding: const EdgeInsetsDirectional.only(start: 16), child: SvgPicture.asset( @@ -69,6 +70,32 @@ class PopupMenuItemActionWidget extends StatelessWidget { ), ); isSelected = specificMenuAction.selectedAction == menuAction.action; + } else if (menuAction + is PopupMenuItemActionRequiredIconWithMultipleSelected) { + final specificMenuAction = + menuAction as PopupMenuItemActionRequiredIconWithMultipleSelected; + iconWidget = Padding( + padding: const EdgeInsetsDirectional.only(end: 16), + child: SvgPicture.asset( + specificMenuAction.actionIcon, + width: specificMenuAction.actionIconSize, + height: specificMenuAction.actionIconSize, + colorFilter: specificMenuAction.actionIconColor.asFilter(), + fit: BoxFit.fill, + ), + ); + selectedIconWidget = Padding( + padding: const EdgeInsetsDirectional.only(start: 16), + child: SvgPicture.asset( + specificMenuAction.selectedIcon, + width: specificMenuAction.selectedIconSize, + height: specificMenuAction.selectedIconSize, + colorFilter: specificMenuAction.selectedIconColor.asFilter(), + fit: BoxFit.fill, + ), + ); + isSelected = + specificMenuAction.selectedActions.contains(menuAction.action); } return PointerInterceptor( diff --git a/lib/features/composer/presentation/extensions/handle_open_context_menu_extension.dart b/lib/features/composer/presentation/extensions/handle_open_context_menu_extension.dart index 3e481a1c3..b0381082d 100644 --- a/lib/features/composer/presentation/extensions/handle_open_context_menu_extension.dart +++ b/lib/features/composer/presentation/extensions/handle_open_context_menu_extension.dart @@ -1,4 +1,5 @@ import 'package:flutter/material.dart'; +import 'package:get/get.dart'; import 'package:tmail_ui_user/features/base/widget/popup_menu/popup_menu_item_action_widget.dart'; import 'package:tmail_ui_user/features/composer/presentation/composer_controller.dart'; import 'package:tmail_ui_user/features/composer/presentation/extensions/mark_as_important_extension.dart'; @@ -9,6 +10,13 @@ import 'package:tmail_ui_user/main/routes/route_navigation.dart'; extension HandleOpenContextMenuExtension on ComposerController { void handleOpenContextMenu(BuildContext context, RelativeRect position) { + final listSelectedComposerActionType = [ + if (isMarkAsImportant.isTrue) + ComposerActionType.markAsImportant, + if (hasRequestReadReceipt.isTrue) + ComposerActionType.requestReadReceipt, + ]; + final popupMenuItems = ComposerActionType.values.map((actionType) { return PopupMenuItem( padding: EdgeInsets.zero, @@ -16,6 +24,7 @@ extension HandleOpenContextMenuExtension on ComposerController { key: actionType.getContextMenuItemKey(), menuAction: PopupMenuItemComposerTypeAction( actionType, + listSelectedComposerActionType, AppLocalizations.of(context), imagePaths, ), diff --git a/lib/features/composer/presentation/model/popup_menu_item_composer_type_action.dart b/lib/features/composer/presentation/model/popup_menu_item_composer_type_action.dart index 5c0eb9bd7..975a54aef 100644 --- a/lib/features/composer/presentation/model/popup_menu_item_composer_type_action.dart +++ b/lib/features/composer/presentation/model/popup_menu_item_composer_type_action.dart @@ -5,12 +5,14 @@ import 'package:tmail_ui_user/features/composer/presentation/model/composer_acti import 'package:tmail_ui_user/main/localizations/app_localizations.dart'; class PopupMenuItemComposerTypeAction - extends PopupMenuItemActionRequiredIcon { + extends PopupMenuItemActionRequiredIconWithMultipleSelected< + ComposerActionType> { final AppLocalizations appLocalizations; final ImagePaths imagePaths; PopupMenuItemComposerTypeAction( super.action, + super.selectedActions, this.appLocalizations, this.imagePaths, ); @@ -26,4 +28,7 @@ class PopupMenuItemComposerTypeAction @override Color get actionNameColor => action.getContextMenuTitleColor(); + + @override + String get selectedIcon => imagePaths.icFilterSelected; }