TF-3704 Re-arrange layout for mailbox item in left side bar and destination picker
Signed-off-by: dab246 <tdvu@linagora.com>
This commit is contained in:
@@ -348,7 +348,8 @@ class DestinationPickerView extends GetWidget<DestinationPickerController>
|
||||
categories,
|
||||
controller,
|
||||
toggleMailboxCategories: controller.toggleMailboxCategories,
|
||||
padding: const EdgeInsets.symmetric(horizontal: 16, vertical: 8)
|
||||
padding: const EdgeInsets.symmetric(horizontal: 16, vertical: 8),
|
||||
isArrangeLTR: false,
|
||||
),
|
||||
AnimatedContainer(
|
||||
duration: const Duration(milliseconds: 400),
|
||||
|
||||
@@ -1,5 +1,4 @@
|
||||
import 'package:core/core.dart';
|
||||
import 'package:core/utils/direction_utils.dart';
|
||||
import 'package:flutter/material.dart';
|
||||
import 'package:flutter_svg/flutter_svg.dart';
|
||||
import 'package:get/get.dart';
|
||||
@@ -331,38 +330,6 @@ class MailboxView extends BaseMailboxView {
|
||||
);
|
||||
}
|
||||
|
||||
Widget _buildHeaderMailboxCategory(BuildContext context, MailboxCategories categories) {
|
||||
return Padding(
|
||||
padding: EdgeInsetsDirectional.only(
|
||||
start: 12,
|
||||
end: controller.responsiveUtils.isLandscapeMobile(context) ? 8 : 28),
|
||||
child: Row(children: [
|
||||
TMailButtonWidget.fromIcon(
|
||||
icon: categories.getExpandMode(controller.mailboxCategoriesExpandMode.value) == ExpandMode.EXPAND
|
||||
? controller.imagePaths.icArrowBottom
|
||||
: DirectionUtils.isDirectionRTLByLanguage(context)
|
||||
? controller.imagePaths.icArrowLeft
|
||||
: controller.imagePaths.icArrowRight,
|
||||
tooltipMessage: AppLocalizations.of(context).collapse,
|
||||
backgroundColor: Colors.transparent,
|
||||
padding: const EdgeInsets.all(5),
|
||||
iconColor: Colors.black,
|
||||
iconSize: 20,
|
||||
onTapActionCallback: () => controller.toggleMailboxCategories(categories)
|
||||
),
|
||||
Expanded(
|
||||
child: Text(
|
||||
categories.getTitle(context),
|
||||
maxLines: 1,
|
||||
overflow: TextOverflow.ellipsis,
|
||||
style: ThemeUtils.textStyleBodyBody3(
|
||||
color: Colors.black,
|
||||
)
|
||||
)
|
||||
),
|
||||
]));
|
||||
}
|
||||
|
||||
Widget _buildBodyMailboxCategory(BuildContext context, MailboxCategories categories, MailboxNode mailboxNode) {
|
||||
final lastNode = mailboxNode.childrenItems?.last;
|
||||
|
||||
@@ -382,7 +349,18 @@ class MailboxView extends BaseMailboxView {
|
||||
return _buildBodyMailboxCategory(context, categories, mailboxNode);
|
||||
}
|
||||
return Column(children: [
|
||||
_buildHeaderMailboxCategory(context, categories),
|
||||
buildHeaderMailboxCategory(
|
||||
context,
|
||||
controller.responsiveUtils,
|
||||
controller.imagePaths,
|
||||
categories,
|
||||
controller,
|
||||
toggleMailboxCategories: controller.toggleMailboxCategories,
|
||||
padding: EdgeInsetsDirectional.only(
|
||||
start: 16,
|
||||
end: controller.responsiveUtils.isLandscapeMobile(context) ? 8 : 28),
|
||||
isArrangeLTR: false,
|
||||
),
|
||||
AnimatedContainer(
|
||||
duration: const Duration(milliseconds: 400),
|
||||
child: categories.getExpandMode(controller.mailboxCategoriesExpandMode.value) == ExpandMode.EXPAND
|
||||
|
||||
@@ -323,7 +323,8 @@ class MailboxView extends BaseMailboxView {
|
||||
toggleMailboxCategories: controller.toggleMailboxCategories,
|
||||
padding: controller.responsiveUtils.isDesktop(context)
|
||||
? null
|
||||
: const EdgeInsetsDirectional.only(start: 16)
|
||||
: const EdgeInsetsDirectional.only(start: 16),
|
||||
isArrangeLTR: false,
|
||||
),
|
||||
AnimatedContainer(
|
||||
duration: const Duration(milliseconds: 400),
|
||||
|
||||
@@ -340,30 +340,40 @@ mixin MailboxWidgetMixin {
|
||||
BaseMailboxController baseMailboxController,
|
||||
{
|
||||
required Function(MailboxCategories categories) toggleMailboxCategories,
|
||||
EdgeInsetsGeometry? padding
|
||||
EdgeInsetsGeometry? padding,
|
||||
bool isArrangeLTR = true,
|
||||
}
|
||||
) {
|
||||
return Padding(
|
||||
padding: padding ?? EdgeInsets.zero,
|
||||
child: Row(children: [
|
||||
Obx(() {
|
||||
final expandMode = categories.getExpandMode(baseMailboxController.mailboxCategoriesExpandMode.value);
|
||||
return TMailButtonWidget.fromIcon(
|
||||
icon: expandMode == ExpandMode.EXPAND
|
||||
? imagePaths.icArrowBottom
|
||||
: DirectionUtils.isDirectionRTLByLanguage(context)
|
||||
? imagePaths.icArrowLeft
|
||||
: imagePaths.icArrowRight,
|
||||
iconColor: Colors.black,
|
||||
iconSize: 20,
|
||||
backgroundColor: Colors.transparent,
|
||||
padding: const EdgeInsets.all(5),
|
||||
tooltipMessage: expandMode == ExpandMode.EXPAND
|
||||
? AppLocalizations.of(context).collapse
|
||||
: AppLocalizations.of(context).expand,
|
||||
onTapActionCallback: () => toggleMailboxCategories(categories)
|
||||
);
|
||||
}),
|
||||
final item = Row(children: [
|
||||
if (!isArrangeLTR)
|
||||
Flexible(
|
||||
child: Text(
|
||||
categories.getTitle(context),
|
||||
maxLines: 1,
|
||||
overflow: CommonTextStyle.defaultTextOverFlow,
|
||||
softWrap: CommonTextStyle.defaultSoftWrap,
|
||||
style: ThemeUtils.textStyleBodyBody3(color: Colors.black),
|
||||
),
|
||||
),
|
||||
Obx(() {
|
||||
final expandMode = categories.getExpandMode(baseMailboxController.mailboxCategoriesExpandMode.value);
|
||||
return TMailButtonWidget.fromIcon(
|
||||
icon: expandMode == ExpandMode.EXPAND
|
||||
? imagePaths.icArrowBottom
|
||||
: DirectionUtils.isDirectionRTLByLanguage(context)
|
||||
? imagePaths.icArrowLeft
|
||||
: imagePaths.icArrowRight,
|
||||
iconColor: Colors.black,
|
||||
iconSize: 20,
|
||||
backgroundColor: Colors.transparent,
|
||||
padding: const EdgeInsets.all(5),
|
||||
tooltipMessage: expandMode == ExpandMode.EXPAND
|
||||
? AppLocalizations.of(context).collapse
|
||||
: AppLocalizations.of(context).expand,
|
||||
onTapActionCallback: () => toggleMailboxCategories(categories)
|
||||
);
|
||||
}),
|
||||
if (isArrangeLTR)
|
||||
Expanded(child: Text(
|
||||
categories.getTitle(context),
|
||||
maxLines: 1,
|
||||
@@ -371,7 +381,12 @@ mixin MailboxWidgetMixin {
|
||||
softWrap: CommonTextStyle.defaultSoftWrap,
|
||||
style: ThemeUtils.textStyleBodyBody3(color: Colors.black)
|
||||
)),
|
||||
])
|
||||
);
|
||||
]);
|
||||
|
||||
if (padding != null) {
|
||||
return Padding(padding: padding, child: item);
|
||||
} else {
|
||||
return item;
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -1,8 +0,0 @@
|
||||
|
||||
import 'package:flutter/material.dart';
|
||||
|
||||
class CountOfEmailsStyles {
|
||||
static const Color textColor = Colors.black;
|
||||
static const double textSize = 13;
|
||||
static const FontWeight textFontWeight = FontWeight.w400;
|
||||
}
|
||||
@@ -1,17 +1,8 @@
|
||||
|
||||
import 'package:core/presentation/extensions/color_extension.dart';
|
||||
import 'package:core/utils/direction_utils.dart';
|
||||
import 'package:flutter/material.dart';
|
||||
|
||||
class LeadingMailboxItemWidgetStyles {
|
||||
static const double expandIconSize = 15;
|
||||
static const double expandIconSplashRadius = 12;
|
||||
|
||||
static const Color displayColor = Colors.black;
|
||||
static const Color normalColor = AppColor.colorIconUnSubscribedMailbox;
|
||||
|
||||
static const EdgeInsetsGeometry expandIconPadding = EdgeInsetsDirectional.only(start: 8);
|
||||
|
||||
static Matrix4 mailboxIconTransform(BuildContext context) => Matrix4.translationValues(
|
||||
DirectionUtils.isDirectionRTLByLanguage(context) ? 0.0 : -4.0,
|
||||
0.0,
|
||||
|
||||
@@ -3,5 +3,6 @@ class MailboxItemWidgetStyles {
|
||||
static const double selectionIconSize = 20;
|
||||
static const double space = 4;
|
||||
static const double padding = 8;
|
||||
static const double itemPadding = 10;
|
||||
static const double borderRadius = 8;
|
||||
}
|
||||
@@ -1,7 +1,6 @@
|
||||
|
||||
import 'package:core/presentation/utils/style_utils.dart';
|
||||
import 'package:flutter/cupertino.dart';
|
||||
import 'package:tmail_ui_user/features/mailbox/presentation/styles/count_of_emails_styles.dart';
|
||||
import 'package:flutter/material.dart';
|
||||
|
||||
class CountOfEmailsWidget extends StatelessWidget {
|
||||
|
||||
@@ -16,10 +15,8 @@ class CountOfEmailsWidget extends StatelessWidget {
|
||||
maxLines: 1,
|
||||
overflow: CommonTextStyle.defaultTextOverFlow,
|
||||
softWrap: CommonTextStyle.defaultSoftWrap,
|
||||
style: const TextStyle(
|
||||
fontSize: CountOfEmailsStyles.textSize,
|
||||
color: CountOfEmailsStyles.textColor,
|
||||
fontWeight: CountOfEmailsStyles.textFontWeight
|
||||
style: Theme.of(context).textTheme.bodySmall?.copyWith(
|
||||
color: Colors.black,
|
||||
),
|
||||
);
|
||||
}
|
||||
|
||||
@@ -1,3 +1,4 @@
|
||||
import 'package:core/presentation/resources/image_paths.dart';
|
||||
import 'package:core/presentation/utils/responsive_utils.dart';
|
||||
import 'package:core/presentation/views/text/text_overflow_builder.dart';
|
||||
import 'package:flutter/material.dart';
|
||||
@@ -7,80 +8,128 @@ import 'package:tmail_ui_user/features/mailbox/presentation/model/mailbox_node.d
|
||||
import 'package:tmail_ui_user/features/mailbox/presentation/styles/label_mailbox_item_widget_styles.dart';
|
||||
import 'package:tmail_ui_user/features/mailbox/presentation/utils/mailbox_method_action_define.dart';
|
||||
import 'package:tmail_ui_user/features/mailbox/presentation/widgets/empty_mailbox_popup_dialog_widget.dart';
|
||||
import 'package:tmail_ui_user/features/mailbox/presentation/widgets/mailbox_expand_button.dart';
|
||||
import 'package:tmail_ui_user/features/mailbox/presentation/widgets/trailing_mailbox_item_widget.dart';
|
||||
|
||||
class LabelMailboxItemWidget extends StatelessWidget {
|
||||
|
||||
final ResponsiveUtils responsiveUtils;
|
||||
final ImagePaths imagePaths;
|
||||
final MailboxNode mailboxNode;
|
||||
final bool showTrailing;
|
||||
final bool isItemHovered;
|
||||
final bool isSelected;
|
||||
final OnClickOpenMenuMailboxNodeAction? onMenuActionClick;
|
||||
final OnEmptyMailboxActionCallback? onEmptyMailboxActionCallback;
|
||||
final OnClickExpandMailboxNodeAction? onClickExpandMailboxNodeAction;
|
||||
|
||||
const LabelMailboxItemWidget({
|
||||
super.key,
|
||||
required this.mailboxNode,
|
||||
required this.responsiveUtils,
|
||||
required this.imagePaths,
|
||||
this.showTrailing = true,
|
||||
this.isItemHovered = false,
|
||||
this.isSelected = false,
|
||||
this.onMenuActionClick,
|
||||
this.onEmptyMailboxActionCallback,
|
||||
this.onClickExpandMailboxNodeAction,
|
||||
});
|
||||
|
||||
@override
|
||||
Widget build(BuildContext context) {
|
||||
return Column(
|
||||
crossAxisAlignment: CrossAxisAlignment.start,
|
||||
mainAxisSize: MainAxisSize.min,
|
||||
final displayNameWidget = TextOverflowBuilder(
|
||||
mailboxNode.item.getDisplayName(context),
|
||||
style: Theme.of(context).textTheme.bodyMedium?.copyWith(
|
||||
fontSize: LabelMailboxItemWidgetStyles.labelFolderTextSize,
|
||||
color: LabelMailboxItemWidgetStyles.labelFolderTextColor,
|
||||
fontWeight: _mailboxNameTextFontWeight,
|
||||
),
|
||||
);
|
||||
|
||||
final nameWithExpandIcon = Row(
|
||||
children: [
|
||||
if (showTrailing)
|
||||
Row(
|
||||
children: [
|
||||
Expanded(
|
||||
child: TextOverflowBuilder(
|
||||
mailboxNode.item.getDisplayName(context),
|
||||
style: Theme.of(context).textTheme.bodyMedium?.copyWith(
|
||||
fontSize: LabelMailboxItemWidgetStyles.labelFolderTextSize,
|
||||
color: LabelMailboxItemWidgetStyles.labelFolderTextColor,
|
||||
fontWeight: _mailboxNameTextFontWeight
|
||||
),
|
||||
),
|
||||
),
|
||||
if (responsiveUtils.isWebDesktop(context) && mailboxNode.item.allowedHasEmptyAction)
|
||||
EmptyMailboxPopupDialogWidget(
|
||||
mailboxNode: mailboxNode,
|
||||
onEmptyMailboxActionCallback: (mailboxNode) => onEmptyMailboxActionCallback?.call(mailboxNode),
|
||||
),
|
||||
TrailingMailboxItemWidget(
|
||||
mailboxNode: mailboxNode,
|
||||
isItemHovered: isItemHovered,
|
||||
onMenuActionClick: onMenuActionClick
|
||||
)
|
||||
],
|
||||
)
|
||||
if (mailboxNode.hasChildren())
|
||||
Flexible(child: displayNameWidget)
|
||||
else
|
||||
TextOverflowBuilder(
|
||||
mailboxNode.item.getDisplayName(context),
|
||||
style: Theme.of(context).textTheme.bodyMedium?.copyWith(
|
||||
fontSize: LabelMailboxItemWidgetStyles.labelFolderTextSize,
|
||||
color: LabelMailboxItemWidgetStyles.labelFolderTextColor,
|
||||
fontWeight: _mailboxNameTextFontWeight
|
||||
Flexible(
|
||||
child: Padding(
|
||||
padding: const EdgeInsets.symmetric(vertical: 3),
|
||||
child: displayNameWidget,
|
||||
),
|
||||
),
|
||||
if (mailboxNode.item.isTeamMailboxes)
|
||||
if (mailboxNode.hasChildren())
|
||||
MailboxExpandButton(
|
||||
mailboxNode: mailboxNode,
|
||||
imagePaths: imagePaths,
|
||||
onExpandFolderActionClick: onClickExpandMailboxNodeAction,
|
||||
),
|
||||
],
|
||||
);
|
||||
|
||||
if (!showTrailing) {
|
||||
if (mailboxNode.item.isTeamMailboxes) {
|
||||
return Column(
|
||||
crossAxisAlignment: CrossAxisAlignment.start,
|
||||
mainAxisSize: MainAxisSize.min,
|
||||
children: [
|
||||
nameWithExpandIcon,
|
||||
TextOverflowBuilder(
|
||||
mailboxNode.item.emailTeamMailBoxes,
|
||||
style: Theme.of(context).textTheme.bodyMedium?.copyWith(
|
||||
fontSize: LabelMailboxItemWidgetStyles.labelFolderTextSize,
|
||||
color: LabelMailboxItemWidgetStyles.teamMailboxEmailTextColor,
|
||||
fontWeight: LabelMailboxItemWidgetStyles.labelFolderTextFontWeight,
|
||||
),
|
||||
),
|
||||
],
|
||||
);
|
||||
} else {
|
||||
return nameWithExpandIcon;
|
||||
}
|
||||
}
|
||||
|
||||
final trailingWidget = TrailingMailboxItemWidget(
|
||||
mailboxNode: mailboxNode,
|
||||
responsiveUtils: responsiveUtils,
|
||||
imagePaths: imagePaths,
|
||||
isItemHovered: isItemHovered,
|
||||
onMenuActionClick: onMenuActionClick,
|
||||
);
|
||||
|
||||
final childWidget = Row(
|
||||
children: [
|
||||
Expanded(child: nameWithExpandIcon),
|
||||
if (responsiveUtils.isWebDesktop(context) &&
|
||||
mailboxNode.item.allowedHasEmptyAction)
|
||||
EmptyMailboxPopupDialogWidget(
|
||||
mailboxNode: mailboxNode,
|
||||
onEmptyMailboxActionCallback: (mailboxNode) =>
|
||||
onEmptyMailboxActionCallback?.call(mailboxNode),
|
||||
),
|
||||
trailingWidget,
|
||||
],
|
||||
);
|
||||
|
||||
if (mailboxNode.item.isTeamMailboxes) {
|
||||
return Column(
|
||||
crossAxisAlignment: CrossAxisAlignment.start,
|
||||
mainAxisSize: MainAxisSize.min,
|
||||
children: [
|
||||
childWidget,
|
||||
TextOverflowBuilder(
|
||||
mailboxNode.item.emailTeamMailBoxes,
|
||||
style: Theme.of(context).textTheme.bodyMedium?.copyWith(
|
||||
fontSize: LabelMailboxItemWidgetStyles.labelFolderTextSize,
|
||||
color: LabelMailboxItemWidgetStyles.teamMailboxEmailTextColor,
|
||||
fontWeight: LabelMailboxItemWidgetStyles.labelFolderTextFontWeight
|
||||
fontWeight: LabelMailboxItemWidgetStyles.labelFolderTextFontWeight,
|
||||
),
|
||||
)
|
||||
],
|
||||
);
|
||||
),
|
||||
],
|
||||
);
|
||||
} else {
|
||||
return childWidget;
|
||||
}
|
||||
}
|
||||
|
||||
FontWeight get _mailboxNameTextFontWeight {
|
||||
|
||||
@@ -1,16 +1,11 @@
|
||||
|
||||
import 'package:core/presentation/resources/image_paths.dart';
|
||||
import 'package:core/presentation/views/button/tmail_button_widget.dart';
|
||||
import 'package:core/utils/direction_utils.dart';
|
||||
import 'package:flutter/material.dart';
|
||||
import 'package:model/extensions/presentation_mailbox_extension.dart';
|
||||
import 'package:model/mailbox/expand_mode.dart';
|
||||
import 'package:model/mailbox/select_mode.dart';
|
||||
import 'package:tmail_ui_user/features/mailbox/presentation/model/mailbox_node.dart';
|
||||
import 'package:tmail_ui_user/features/mailbox/presentation/styles/leading_mailbox_item_widget_styles.dart';
|
||||
import 'package:tmail_ui_user/features/mailbox/presentation/utils/mailbox_method_action_define.dart';
|
||||
import 'package:tmail_ui_user/features/mailbox/presentation/widgets/mailbox_icon_widget.dart';
|
||||
import 'package:tmail_ui_user/main/localizations/app_localizations.dart';
|
||||
|
||||
class LeadingMailboxItemWidget extends StatelessWidget {
|
||||
|
||||
@@ -18,63 +13,25 @@ class LeadingMailboxItemWidget extends StatelessWidget {
|
||||
final MailboxNode mailboxNode;
|
||||
final SelectMode selectionMode;
|
||||
final OnSelectMailboxNodeAction? onSelectMailboxFolderClick;
|
||||
final OnClickExpandMailboxNodeAction? onExpandFolderActionClick;
|
||||
|
||||
const LeadingMailboxItemWidget({
|
||||
super.key,
|
||||
required this.imagePaths,
|
||||
required this.mailboxNode,
|
||||
this.selectionMode = SelectMode.INACTIVE,
|
||||
this.onExpandFolderActionClick,
|
||||
this.onSelectMailboxFolderClick,
|
||||
});
|
||||
|
||||
@override
|
||||
Widget build(BuildContext context) {
|
||||
return Row(children: [
|
||||
Visibility.maintain(
|
||||
visible: mailboxNode.hasChildren(),
|
||||
child: TMailButtonWidget.fromIcon(
|
||||
icon: _getExpandIcon(context, imagePaths),
|
||||
iconColor: _expandIconColor,
|
||||
iconSize: 20,
|
||||
padding: const EdgeInsets.all(5),
|
||||
backgroundColor: Colors.transparent,
|
||||
tooltipMessage: _getExpandTooltipMessage(context),
|
||||
onTapActionCallback: () => onExpandFolderActionClick?.call(mailboxNode)
|
||||
),
|
||||
),
|
||||
Transform(
|
||||
transform: LeadingMailboxItemWidgetStyles.mailboxIconTransform(context),
|
||||
child: MailboxIconWidget(
|
||||
imagePaths: imagePaths,
|
||||
mailboxNode: mailboxNode,
|
||||
selectionMode: selectionMode,
|
||||
onSelectMailboxFolderClick: onSelectMailboxFolderClick
|
||||
)
|
||||
),
|
||||
]);
|
||||
}
|
||||
|
||||
String _getExpandIcon(BuildContext context, ImagePaths imagePaths) {
|
||||
if (mailboxNode.expandMode == ExpandMode.EXPAND) {
|
||||
return imagePaths.icArrowBottom;
|
||||
} else {
|
||||
return DirectionUtils.isDirectionRTLByLanguage(context)
|
||||
? imagePaths.icArrowLeft
|
||||
: imagePaths.icArrowRight;
|
||||
}
|
||||
}
|
||||
|
||||
Color get _expandIconColor {
|
||||
return mailboxNode.item.allowedToDisplay
|
||||
? LeadingMailboxItemWidgetStyles.displayColor
|
||||
: LeadingMailboxItemWidgetStyles.normalColor;
|
||||
}
|
||||
|
||||
String _getExpandTooltipMessage(BuildContext context) {
|
||||
return mailboxNode.expandMode == ExpandMode.EXPAND
|
||||
? AppLocalizations.of(context).collapse
|
||||
: AppLocalizations.of(context).expand;
|
||||
return Transform(
|
||||
transform: LeadingMailboxItemWidgetStyles.mailboxIconTransform(context),
|
||||
child: MailboxIconWidget(
|
||||
imagePaths: imagePaths,
|
||||
mailboxNode: mailboxNode,
|
||||
selectionMode: selectionMode,
|
||||
onSelectMailboxFolderClick: onSelectMailboxFolderClick
|
||||
)
|
||||
);
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,58 @@
|
||||
import 'package:core/presentation/extensions/color_extension.dart';
|
||||
import 'package:core/presentation/resources/image_paths.dart';
|
||||
import 'package:core/presentation/views/button/tmail_button_widget.dart';
|
||||
import 'package:core/utils/direction_utils.dart';
|
||||
import 'package:flutter/material.dart';
|
||||
import 'package:model/extensions/presentation_mailbox_extension.dart';
|
||||
import 'package:model/mailbox/expand_mode.dart';
|
||||
import 'package:tmail_ui_user/features/mailbox/presentation/model/mailbox_node.dart';
|
||||
import 'package:tmail_ui_user/features/mailbox/presentation/utils/mailbox_method_action_define.dart';
|
||||
import 'package:tmail_ui_user/main/localizations/app_localizations.dart';
|
||||
|
||||
class MailboxExpandButton extends StatelessWidget {
|
||||
final MailboxNode mailboxNode;
|
||||
final ImagePaths imagePaths;
|
||||
final OnClickExpandMailboxNodeAction? onExpandFolderActionClick;
|
||||
|
||||
const MailboxExpandButton({
|
||||
super.key,
|
||||
required this.mailboxNode,
|
||||
required this.imagePaths,
|
||||
required this.onExpandFolderActionClick,
|
||||
});
|
||||
|
||||
@override
|
||||
Widget build(BuildContext context) {
|
||||
return TMailButtonWidget.fromIcon(
|
||||
icon: _getExpandIcon(context, imagePaths),
|
||||
iconColor: _expandIconColor,
|
||||
iconSize: 20,
|
||||
padding: const EdgeInsets.all(5),
|
||||
backgroundColor: Colors.transparent,
|
||||
tooltipMessage: _getExpandTooltipMessage(context),
|
||||
onTapActionCallback: () => onExpandFolderActionClick?.call(mailboxNode),
|
||||
);
|
||||
}
|
||||
|
||||
String _getExpandIcon(BuildContext context, ImagePaths imagePaths) {
|
||||
if (mailboxNode.expandMode == ExpandMode.EXPAND) {
|
||||
return imagePaths.icArrowBottom;
|
||||
} else {
|
||||
return DirectionUtils.isDirectionRTLByLanguage(context)
|
||||
? imagePaths.icArrowLeft
|
||||
: imagePaths.icArrowRight;
|
||||
}
|
||||
}
|
||||
|
||||
Color get _expandIconColor {
|
||||
return mailboxNode.item.allowedToDisplay
|
||||
? Colors.black
|
||||
: AppColor.steelGray200;
|
||||
}
|
||||
|
||||
String _getExpandTooltipMessage(BuildContext context) {
|
||||
return mailboxNode.expandMode == ExpandMode.EXPAND
|
||||
? AppLocalizations.of(context).collapse
|
||||
: AppLocalizations.of(context).expand;
|
||||
}
|
||||
}
|
||||
@@ -77,7 +77,7 @@ class _MailboxItemWidgetState extends State<MailboxItemWidget> {
|
||||
color: backgroundColorItem
|
||||
),
|
||||
padding: const EdgeInsetsDirectional.symmetric(
|
||||
horizontal: MailboxItemWidgetStyles.padding,
|
||||
horizontal: MailboxItemWidgetStyles.itemPadding,
|
||||
vertical: MailboxItemWidgetStyles.space,
|
||||
),
|
||||
child: Row(
|
||||
@@ -91,17 +91,18 @@ class _MailboxItemWidgetState extends State<MailboxItemWidget> {
|
||||
mailboxNode: widget.mailboxNode,
|
||||
selectionMode: widget.selectionMode,
|
||||
onSelectMailboxFolderClick: widget.onSelectMailboxFolderClick,
|
||||
onExpandFolderActionClick: widget.onExpandFolderActionClick,
|
||||
),
|
||||
const SizedBox(width: MailboxItemWidgetStyles.space),
|
||||
Expanded(
|
||||
child: LabelMailboxItemWidget(
|
||||
responsiveUtils: _responsiveUtils,
|
||||
mailboxNode: widget.mailboxNode,
|
||||
imagePaths: _imagePaths,
|
||||
isItemHovered: _isItemHovered,
|
||||
isSelected: _isSelected,
|
||||
onMenuActionClick: widget.onMenuActionClick,
|
||||
onEmptyMailboxActionCallback: widget.onEmptyMailboxActionCallback
|
||||
onEmptyMailboxActionCallback: widget.onEmptyMailboxActionCallback,
|
||||
onClickExpandMailboxNodeAction: widget.onExpandFolderActionClick,
|
||||
)
|
||||
),
|
||||
]
|
||||
@@ -123,7 +124,7 @@ class _MailboxItemWidgetState extends State<MailboxItemWidget> {
|
||||
color: backgroundColorItem
|
||||
),
|
||||
padding: const EdgeInsetsDirectional.symmetric(
|
||||
horizontal: MailboxItemWidgetStyles.padding,
|
||||
horizontal: MailboxItemWidgetStyles.itemPadding,
|
||||
vertical: MailboxItemWidgetStyles.space,
|
||||
),
|
||||
child: Row(
|
||||
@@ -133,17 +134,18 @@ class _MailboxItemWidgetState extends State<MailboxItemWidget> {
|
||||
mailboxNode: widget.mailboxNode,
|
||||
selectionMode: widget.selectionMode,
|
||||
onSelectMailboxFolderClick: widget.onSelectMailboxFolderClick,
|
||||
onExpandFolderActionClick: widget.onExpandFolderActionClick,
|
||||
),
|
||||
const SizedBox(width: MailboxItemWidgetStyles.space),
|
||||
Expanded(
|
||||
child: LabelMailboxItemWidget(
|
||||
responsiveUtils: _responsiveUtils,
|
||||
mailboxNode: widget.mailboxNode,
|
||||
imagePaths: _imagePaths,
|
||||
isItemHovered: _isItemHovered,
|
||||
isSelected: _isSelected,
|
||||
onMenuActionClick: widget.onMenuActionClick,
|
||||
onEmptyMailboxActionCallback: widget.onEmptyMailboxActionCallback
|
||||
onEmptyMailboxActionCallback: widget.onEmptyMailboxActionCallback,
|
||||
onClickExpandMailboxNodeAction: widget.onExpandFolderActionClick,
|
||||
)
|
||||
),
|
||||
]
|
||||
@@ -165,42 +167,37 @@ class _MailboxItemWidgetState extends State<MailboxItemWidget> {
|
||||
color: backgroundColorItem
|
||||
),
|
||||
padding: const EdgeInsetsDirectional.symmetric(
|
||||
horizontal: MailboxItemWidgetStyles.padding,
|
||||
horizontal: MailboxItemWidgetStyles.itemPadding,
|
||||
vertical: MailboxItemWidgetStyles.space,
|
||||
),
|
||||
child: Column(
|
||||
mainAxisSize: MainAxisSize.min,
|
||||
mainAxisAlignment: MainAxisAlignment.center,
|
||||
child: Row(
|
||||
children: [
|
||||
Row(
|
||||
children: [
|
||||
LeadingMailboxItemWidget(
|
||||
imagePaths: _imagePaths,
|
||||
mailboxNode: widget.mailboxNode,
|
||||
selectionMode: widget.selectionMode,
|
||||
onSelectMailboxFolderClick: widget.onSelectMailboxFolderClick,
|
||||
onExpandFolderActionClick: widget.onExpandFolderActionClick,
|
||||
),
|
||||
const SizedBox(width: MailboxItemWidgetStyles.padding),
|
||||
Expanded(
|
||||
child: LabelMailboxItemWidget(
|
||||
responsiveUtils: _responsiveUtils,
|
||||
mailboxNode: widget.mailboxNode,
|
||||
isItemHovered: _isItemHovered,
|
||||
isSelected: _isSelected,
|
||||
onMenuActionClick: widget.onMenuActionClick,
|
||||
onEmptyMailboxActionCallback: widget.onEmptyMailboxActionCallback
|
||||
)
|
||||
),
|
||||
if (_isSelectActionNoValid)
|
||||
SvgPicture.asset(
|
||||
_imagePaths.icSelectedSB,
|
||||
width: MailboxItemWidgetStyles.selectionIconSize,
|
||||
height: MailboxItemWidgetStyles.selectionIconSize,
|
||||
fit: BoxFit.fill
|
||||
)
|
||||
]
|
||||
LeadingMailboxItemWidget(
|
||||
imagePaths: _imagePaths,
|
||||
mailboxNode: widget.mailboxNode,
|
||||
selectionMode: widget.selectionMode,
|
||||
onSelectMailboxFolderClick: widget.onSelectMailboxFolderClick,
|
||||
),
|
||||
const SizedBox(width: MailboxItemWidgetStyles.padding),
|
||||
Expanded(
|
||||
child: LabelMailboxItemWidget(
|
||||
responsiveUtils: _responsiveUtils,
|
||||
mailboxNode: widget.mailboxNode,
|
||||
imagePaths: _imagePaths,
|
||||
isItemHovered: _isItemHovered,
|
||||
isSelected: _isSelected,
|
||||
onMenuActionClick: widget.onMenuActionClick,
|
||||
onEmptyMailboxActionCallback: widget.onEmptyMailboxActionCallback,
|
||||
onClickExpandMailboxNodeAction: widget.onExpandFolderActionClick,
|
||||
)
|
||||
),
|
||||
if (_isSelectActionNoValid)
|
||||
SvgPicture.asset(
|
||||
_imagePaths.icSelectedSB,
|
||||
width: MailboxItemWidgetStyles.selectionIconSize,
|
||||
height: MailboxItemWidgetStyles.selectionIconSize,
|
||||
fit: BoxFit.fill
|
||||
)
|
||||
]
|
||||
),
|
||||
),
|
||||
@@ -222,7 +219,7 @@ class _MailboxItemWidgetState extends State<MailboxItemWidget> {
|
||||
hoverColor: AppColor.colorMailboxHovered,
|
||||
child: Container(
|
||||
padding: const EdgeInsetsDirectional.symmetric(
|
||||
horizontal: MailboxItemWidgetStyles.padding,
|
||||
horizontal: MailboxItemWidgetStyles.itemPadding,
|
||||
vertical: MailboxItemWidgetStyles.space,
|
||||
),
|
||||
color: widget.mailboxNode.isSelected
|
||||
@@ -235,18 +232,19 @@ class _MailboxItemWidgetState extends State<MailboxItemWidget> {
|
||||
mailboxNode: widget.mailboxNode,
|
||||
selectionMode: widget.selectionMode,
|
||||
onSelectMailboxFolderClick: widget.onSelectMailboxFolderClick,
|
||||
onExpandFolderActionClick: widget.onExpandFolderActionClick,
|
||||
),
|
||||
const SizedBox(width: MailboxItemWidgetStyles.padding),
|
||||
Expanded(
|
||||
child: LabelMailboxItemWidget(
|
||||
responsiveUtils: _responsiveUtils,
|
||||
mailboxNode: widget.mailboxNode,
|
||||
imagePaths: _imagePaths,
|
||||
showTrailing: false,
|
||||
isSelected: _isSelected,
|
||||
isItemHovered: _isItemHovered,
|
||||
onMenuActionClick: widget.onMenuActionClick,
|
||||
onEmptyMailboxActionCallback: widget.onEmptyMailboxActionCallback
|
||||
onEmptyMailboxActionCallback: widget.onEmptyMailboxActionCallback,
|
||||
onClickExpandMailboxNodeAction: widget.onExpandFolderActionClick,
|
||||
)
|
||||
),
|
||||
if (_isSelectActionNoValid)
|
||||
@@ -256,7 +254,6 @@ class _MailboxItemWidgetState extends State<MailboxItemWidget> {
|
||||
height: MailboxItemWidgetStyles.selectionIconSize,
|
||||
fit: BoxFit.fill
|
||||
),
|
||||
const SizedBox(width: MailboxItemWidgetStyles.padding),
|
||||
]
|
||||
)
|
||||
),
|
||||
|
||||
@@ -4,7 +4,6 @@ import 'package:core/presentation/utils/responsive_utils.dart';
|
||||
import 'package:core/presentation/views/button/tmail_button_widget.dart';
|
||||
import 'package:core/utils/platform_info.dart';
|
||||
import 'package:flutter/material.dart';
|
||||
import 'package:get/get.dart';
|
||||
import 'package:model/extensions/presentation_mailbox_extension.dart';
|
||||
import 'package:tmail_ui_user/features/mailbox/presentation/model/mailbox_node.dart';
|
||||
import 'package:tmail_ui_user/features/mailbox/presentation/styles/trailing_mailbox_item_widget_styles.dart';
|
||||
@@ -14,15 +13,16 @@ import 'package:tmail_ui_user/features/mailbox/presentation/widgets/count_of_ema
|
||||
class TrailingMailboxItemWidget extends StatelessWidget {
|
||||
|
||||
final MailboxNode mailboxNode;
|
||||
final ImagePaths imagePaths;
|
||||
final ResponsiveUtils responsiveUtils;
|
||||
final bool isItemHovered;
|
||||
final OnClickOpenMenuMailboxNodeAction? onMenuActionClick;
|
||||
|
||||
final _imagePaths = Get.find<ImagePaths>();
|
||||
final _responsiveUtils = Get.find<ResponsiveUtils>();
|
||||
|
||||
TrailingMailboxItemWidget({
|
||||
const TrailingMailboxItemWidget({
|
||||
super.key,
|
||||
required this.mailboxNode,
|
||||
required this.imagePaths,
|
||||
required this.responsiveUtils,
|
||||
this.isItemHovered = false,
|
||||
this.onMenuActionClick,
|
||||
});
|
||||
@@ -32,16 +32,16 @@ class TrailingMailboxItemWidget extends StatelessWidget {
|
||||
if (PlatformInfo.isWeb) {
|
||||
if (isItemHovered) {
|
||||
return TMailButtonWidget.fromIcon(
|
||||
margin: _responsiveUtils.isDesktop(context) && mailboxNode.item.allowedHasEmptyAction
|
||||
margin: responsiveUtils.isDesktop(context) && mailboxNode.item.allowedHasEmptyAction
|
||||
? EdgeInsets.zero
|
||||
: TrailingMailboxItemWidgetStyles.menuIconMargin,
|
||||
icon: _imagePaths.icComposerMenu,
|
||||
icon: imagePaths.icComposerMenu,
|
||||
iconSize: TrailingMailboxItemWidgetStyles.menuIconSize,
|
||||
padding: TrailingMailboxItemWidgetStyles.menuIconPadding,
|
||||
backgroundColor: TrailingMailboxItemWidgetStyles.menuIconBackgroundColor,
|
||||
onTapActionAtPositionCallback: (position) => onMenuActionClick?.call(position, mailboxNode),
|
||||
);
|
||||
} else if (_responsiveUtils.isDesktop(context) && mailboxNode.item.allowedHasEmptyAction) {
|
||||
} else if (responsiveUtils.isDesktop(context) && mailboxNode.item.allowedHasEmptyAction) {
|
||||
return const SizedBox();
|
||||
} else if (mailboxNode.item.allowedToDisplayCountOfUnreadEmails) {
|
||||
return Padding(
|
||||
|
||||
Reference in New Issue
Block a user