TF-3766 Fix Mark as important, Request read receipt not selected after touch in composer

Signed-off-by: dab246 <tdvu@linagora.com>
This commit is contained in:
dab246
2025-06-17 09:23:43 +07:00
committed by Dat H. Pham
parent e648736819
commit 1645c03000
4 changed files with 54 additions and 2 deletions
@@ -56,3 +56,14 @@ abstract class PopupMenuItemActionRequiredFull<T> extends PopupMenuItemAction<T>
PopupMenuItemActionRequiredFull(super.action, this.selectedAction);
}
abstract class PopupMenuItemActionRequiredIconWithMultipleSelected<T>
extends PopupMenuItemAction<T>
with OptionalPopupIcon, OptionalPopupSelectedIcon<T> {
final List<T> selectedActions;
PopupMenuItemActionRequiredIconWithMultipleSelected(
super.action,
this.selectedActions,
);
}
@@ -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(
@@ -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,
),
@@ -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<ComposerActionType> {
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;
}