TF-3762 Update style for Clean button of Trash/Spam folder
Signed-off-by: dab246 <tdvu@linagora.com>
This commit is contained in:
+2
-10
@@ -1,16 +1,8 @@
|
|||||||
import 'package:core/presentation/extensions/color_extension.dart';
|
|
||||||
import 'package:flutter/material.dart';
|
import 'package:flutter/material.dart';
|
||||||
|
|
||||||
class EmptyMailboxPopupDialogWidgetStyles {
|
class EmptyMailboxPopupDialogWidgetStyles {
|
||||||
static const EdgeInsetsGeometry emptyButtonPadding = EdgeInsetsDirectional.symmetric(vertical: 4, horizontal: 10);
|
static const EdgeInsetsGeometry emptyButtonPadding =
|
||||||
|
EdgeInsetsDirectional.symmetric(vertical: 4, horizontal: 8);
|
||||||
static const Color emptyButtonBackground = Colors.transparent;
|
|
||||||
|
|
||||||
static const TextStyle emptyButtonTextStyle = TextStyle(
|
|
||||||
fontWeight: FontWeight.w400,
|
|
||||||
fontSize: 15,
|
|
||||||
color: AppColor.colorTextBody
|
|
||||||
);
|
|
||||||
|
|
||||||
static const Offset dialogOverlayOffset = Offset(0.0, 50.0);
|
static const Offset dialogOverlayOffset = Offset(0.0, 50.0);
|
||||||
}
|
}
|
||||||
@@ -1,3 +1,4 @@
|
|||||||
|
import 'package:core/presentation/extensions/color_extension.dart';
|
||||||
import 'package:core/presentation/views/button/tmail_button_widget.dart';
|
import 'package:core/presentation/views/button/tmail_button_widget.dart';
|
||||||
import 'package:flutter/material.dart';
|
import 'package:flutter/material.dart';
|
||||||
import 'package:flutter_portal/flutter_portal.dart';
|
import 'package:flutter_portal/flutter_portal.dart';
|
||||||
@@ -7,15 +8,19 @@ import 'package:tmail_ui_user/features/mailbox/presentation/utils/mailbox_method
|
|||||||
import 'package:tmail_ui_user/features/mailbox/presentation/widgets/empty_mailbox_dialog_overlay.dart';
|
import 'package:tmail_ui_user/features/mailbox/presentation/widgets/empty_mailbox_dialog_overlay.dart';
|
||||||
import 'package:tmail_ui_user/main/localizations/app_localizations.dart';
|
import 'package:tmail_ui_user/main/localizations/app_localizations.dart';
|
||||||
|
|
||||||
|
typedef OnPopupVisibleChange = void Function(bool visible);
|
||||||
|
|
||||||
class EmptyMailboxPopupDialogWidget extends StatefulWidget {
|
class EmptyMailboxPopupDialogWidget extends StatefulWidget {
|
||||||
|
|
||||||
final MailboxNode mailboxNode;
|
final MailboxNode mailboxNode;
|
||||||
final OnEmptyMailboxActionCallback onEmptyMailboxActionCallback;
|
final OnEmptyMailboxActionCallback onEmptyMailboxActionCallback;
|
||||||
|
final OnPopupVisibleChange? onPopupVisibleChange;
|
||||||
|
|
||||||
const EmptyMailboxPopupDialogWidget({
|
const EmptyMailboxPopupDialogWidget({
|
||||||
super.key,
|
super.key,
|
||||||
required this.mailboxNode,
|
required this.mailboxNode,
|
||||||
required this.onEmptyMailboxActionCallback,
|
required this.onEmptyMailboxActionCallback,
|
||||||
|
this.onPopupVisibleChange,
|
||||||
});
|
});
|
||||||
|
|
||||||
@override
|
@override
|
||||||
@@ -26,13 +31,20 @@ class _EmptyMailboxPopupDialogWidgetState extends State<EmptyMailboxPopupDialogW
|
|||||||
|
|
||||||
bool _visible = false;
|
bool _visible = false;
|
||||||
|
|
||||||
|
void _setVisible(bool visible) {
|
||||||
|
if (_visible != visible) {
|
||||||
|
setState(() => _visible = visible);
|
||||||
|
widget.onPopupVisibleChange?.call(visible);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
@override
|
@override
|
||||||
Widget build(BuildContext context) {
|
Widget build(BuildContext context) {
|
||||||
return PortalTarget(
|
return PortalTarget(
|
||||||
visible: _visible,
|
visible: _visible,
|
||||||
portalFollower: GestureDetector(
|
portalFollower: GestureDetector(
|
||||||
behavior: HitTestBehavior.opaque,
|
behavior: HitTestBehavior.opaque,
|
||||||
onTap: () => setState(() => _visible = false)
|
onTap: () => _setVisible(false),
|
||||||
),
|
),
|
||||||
child: PortalTarget(
|
child: PortalTarget(
|
||||||
anchor: const Aligned(
|
anchor: const Aligned(
|
||||||
@@ -42,19 +54,21 @@ class _EmptyMailboxPopupDialogWidgetState extends State<EmptyMailboxPopupDialogW
|
|||||||
),
|
),
|
||||||
portalFollower: EmptyMailboxDialogOverlay(
|
portalFollower: EmptyMailboxDialogOverlay(
|
||||||
mailboxNode: widget.mailboxNode,
|
mailboxNode: widget.mailboxNode,
|
||||||
onCancelActionClick: () => setState(() => _visible = false),
|
onCancelActionClick: () => _setVisible(false),
|
||||||
onEmptyMailboxActionCallback: (mailboxNode) {
|
onEmptyMailboxActionCallback: (mailboxNode) {
|
||||||
setState(() => _visible = false);
|
_setVisible(false);
|
||||||
widget.onEmptyMailboxActionCallback.call(mailboxNode);
|
widget.onEmptyMailboxActionCallback.call(mailboxNode);
|
||||||
},
|
},
|
||||||
),
|
),
|
||||||
visible: _visible,
|
visible: _visible,
|
||||||
child: TMailButtonWidget.fromText(
|
child: TMailButtonWidget.fromText(
|
||||||
text: AppLocalizations.of(context).clean,
|
text: AppLocalizations.of(context).clean,
|
||||||
textStyle: EmptyMailboxPopupDialogWidgetStyles.emptyButtonTextStyle,
|
textStyle: Theme.of(context).textTheme.bodySmall?.copyWith(
|
||||||
backgroundColor: EmptyMailboxPopupDialogWidgetStyles.emptyButtonBackground,
|
color: AppColor.steelGrayA540,
|
||||||
|
),
|
||||||
|
backgroundColor: Colors.transparent,
|
||||||
padding: EmptyMailboxPopupDialogWidgetStyles.emptyButtonPadding,
|
padding: EmptyMailboxPopupDialogWidgetStyles.emptyButtonPadding,
|
||||||
onTapActionCallback: () => setState(() => _visible = true)
|
onTapActionCallback: () => _setVisible(true),
|
||||||
)
|
)
|
||||||
)
|
)
|
||||||
);
|
);
|
||||||
|
|||||||
@@ -12,7 +12,7 @@ import 'package:tmail_ui_user/features/mailbox/presentation/widgets/empty_mailbo
|
|||||||
import 'package:tmail_ui_user/features/mailbox/presentation/widgets/mailbox_expand_button.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';
|
import 'package:tmail_ui_user/features/mailbox/presentation/widgets/trailing_mailbox_item_widget.dart';
|
||||||
|
|
||||||
class LabelMailboxItemWidget extends StatelessWidget {
|
class LabelMailboxItemWidget extends StatefulWidget {
|
||||||
|
|
||||||
final GlobalKey itemKey;
|
final GlobalKey itemKey;
|
||||||
final ResponsiveUtils responsiveUtils;
|
final ResponsiveUtils responsiveUtils;
|
||||||
@@ -39,18 +39,26 @@ class LabelMailboxItemWidget extends StatelessWidget {
|
|||||||
this.onClickExpandMailboxNodeAction,
|
this.onClickExpandMailboxNodeAction,
|
||||||
});
|
});
|
||||||
|
|
||||||
|
@override
|
||||||
|
State<LabelMailboxItemWidget> createState() => _LabelMailboxItemWidgetState();
|
||||||
|
}
|
||||||
|
|
||||||
|
class _LabelMailboxItemWidgetState extends State<LabelMailboxItemWidget> {
|
||||||
|
|
||||||
|
bool _popupVisible = false;
|
||||||
|
|
||||||
@override
|
@override
|
||||||
Widget build(BuildContext context) {
|
Widget build(BuildContext context) {
|
||||||
final displayNameWidget = TextOverflowBuilder(
|
final displayNameWidget = TextOverflowBuilder(
|
||||||
mailboxNode.item.getDisplayName(context),
|
widget.mailboxNode.item.getDisplayName(context),
|
||||||
style: isSelected
|
style: widget.isSelected
|
||||||
? ThemeUtils.textStyleInter700(color: Colors.black, fontSize: 14)
|
? ThemeUtils.textStyleInter700(color: Colors.black, fontSize: 14)
|
||||||
: ThemeUtils.textStyleBodyBody3(color: Colors.black),
|
: ThemeUtils.textStyleBodyBody3(color: Colors.black),
|
||||||
);
|
);
|
||||||
|
|
||||||
final nameWithExpandIcon = Row(
|
final nameWithExpandIcon = Row(
|
||||||
children: [
|
children: [
|
||||||
if (mailboxNode.hasChildren())
|
if (widget.mailboxNode.hasChildren())
|
||||||
Flexible(child: displayNameWidget)
|
Flexible(child: displayNameWidget)
|
||||||
else
|
else
|
||||||
Flexible(
|
Flexible(
|
||||||
@@ -59,25 +67,25 @@ class LabelMailboxItemWidget extends StatelessWidget {
|
|||||||
child: displayNameWidget,
|
child: displayNameWidget,
|
||||||
),
|
),
|
||||||
),
|
),
|
||||||
if (mailboxNode.hasChildren())
|
if (widget.mailboxNode.hasChildren())
|
||||||
MailboxExpandButton(
|
MailboxExpandButton(
|
||||||
itemKey: itemKey,
|
itemKey: widget.itemKey,
|
||||||
mailboxNode: mailboxNode,
|
mailboxNode: widget.mailboxNode,
|
||||||
imagePaths: imagePaths,
|
imagePaths: widget.imagePaths,
|
||||||
onExpandFolderActionClick: onClickExpandMailboxNodeAction,
|
onExpandFolderActionClick: widget.onClickExpandMailboxNodeAction,
|
||||||
),
|
),
|
||||||
],
|
],
|
||||||
);
|
);
|
||||||
|
|
||||||
if (!showTrailing) {
|
if (!widget.showTrailing) {
|
||||||
if (mailboxNode.item.isTeamMailboxes) {
|
if (widget.mailboxNode.item.isTeamMailboxes) {
|
||||||
return Column(
|
return Column(
|
||||||
crossAxisAlignment: CrossAxisAlignment.start,
|
crossAxisAlignment: CrossAxisAlignment.start,
|
||||||
mainAxisSize: MainAxisSize.min,
|
mainAxisSize: MainAxisSize.min,
|
||||||
children: [
|
children: [
|
||||||
nameWithExpandIcon,
|
nameWithExpandIcon,
|
||||||
TextOverflowBuilder(
|
TextOverflowBuilder(
|
||||||
mailboxNode.item.emailTeamMailBoxes,
|
widget.mailboxNode.item.emailTeamMailBoxes,
|
||||||
style: Theme.of(context).textTheme.bodyMedium?.copyWith(
|
style: Theme.of(context).textTheme.bodyMedium?.copyWith(
|
||||||
fontSize: LabelMailboxItemWidgetStyles.labelFolderTextSize,
|
fontSize: LabelMailboxItemWidgetStyles.labelFolderTextSize,
|
||||||
color: LabelMailboxItemWidgetStyles.teamMailboxEmailTextColor,
|
color: LabelMailboxItemWidgetStyles.teamMailboxEmailTextColor,
|
||||||
@@ -92,35 +100,40 @@ class LabelMailboxItemWidget extends StatelessWidget {
|
|||||||
}
|
}
|
||||||
|
|
||||||
final trailingWidget = TrailingMailboxItemWidget(
|
final trailingWidget = TrailingMailboxItemWidget(
|
||||||
mailboxNode: mailboxNode,
|
mailboxNode: widget.mailboxNode,
|
||||||
responsiveUtils: responsiveUtils,
|
responsiveUtils: widget.responsiveUtils,
|
||||||
imagePaths: imagePaths,
|
imagePaths: widget.imagePaths,
|
||||||
isItemHovered: isItemHovered,
|
isItemHovered: widget.isItemHovered,
|
||||||
onMenuActionClick: onMenuActionClick,
|
onMenuActionClick: widget.onMenuActionClick,
|
||||||
);
|
);
|
||||||
|
|
||||||
final childWidget = Row(
|
final childWidget = Row(
|
||||||
children: [
|
children: [
|
||||||
Expanded(child: nameWithExpandIcon),
|
Expanded(child: nameWithExpandIcon),
|
||||||
if (responsiveUtils.isWebDesktop(context) &&
|
if (_showCleanButton(context))
|
||||||
mailboxNode.item.allowedHasEmptyAction)
|
Offstage(
|
||||||
EmptyMailboxPopupDialogWidget(
|
offstage: !_shouldShowPopup,
|
||||||
mailboxNode: mailboxNode,
|
child: EmptyMailboxPopupDialogWidget(
|
||||||
onEmptyMailboxActionCallback: (mailboxNode) =>
|
mailboxNode: widget.mailboxNode,
|
||||||
onEmptyMailboxActionCallback?.call(mailboxNode),
|
onEmptyMailboxActionCallback: (mailboxNode) {
|
||||||
|
_onPopupVisibleChange(false);
|
||||||
|
widget.onEmptyMailboxActionCallback?.call(mailboxNode);
|
||||||
|
},
|
||||||
|
onPopupVisibleChange: _onPopupVisibleChange,
|
||||||
|
),
|
||||||
),
|
),
|
||||||
trailingWidget,
|
trailingWidget,
|
||||||
],
|
],
|
||||||
);
|
);
|
||||||
|
|
||||||
if (mailboxNode.item.isTeamMailboxes) {
|
if (widget.mailboxNode.item.isTeamMailboxes) {
|
||||||
return Column(
|
return Column(
|
||||||
crossAxisAlignment: CrossAxisAlignment.start,
|
crossAxisAlignment: CrossAxisAlignment.start,
|
||||||
mainAxisSize: MainAxisSize.min,
|
mainAxisSize: MainAxisSize.min,
|
||||||
children: [
|
children: [
|
||||||
childWidget,
|
childWidget,
|
||||||
TextOverflowBuilder(
|
TextOverflowBuilder(
|
||||||
mailboxNode.item.emailTeamMailBoxes,
|
widget.mailboxNode.item.emailTeamMailBoxes,
|
||||||
style: Theme.of(context).textTheme.bodyMedium?.copyWith(
|
style: Theme.of(context).textTheme.bodyMedium?.copyWith(
|
||||||
fontSize: LabelMailboxItemWidgetStyles.labelFolderTextSize,
|
fontSize: LabelMailboxItemWidgetStyles.labelFolderTextSize,
|
||||||
color: LabelMailboxItemWidgetStyles.teamMailboxEmailTextColor,
|
color: LabelMailboxItemWidgetStyles.teamMailboxEmailTextColor,
|
||||||
@@ -133,4 +146,17 @@ class LabelMailboxItemWidget extends StatelessWidget {
|
|||||||
return childWidget;
|
return childWidget;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
void _onPopupVisibleChange(bool visible) {
|
||||||
|
if (_popupVisible != visible) {
|
||||||
|
setState(() => _popupVisible = visible);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
bool get _shouldShowPopup => widget.isItemHovered || _popupVisible;
|
||||||
|
|
||||||
|
bool _showCleanButton(BuildContext context) {
|
||||||
|
return widget.responsiveUtils.isWebDesktop(context) &&
|
||||||
|
widget.mailboxNode.item.allowedHasEmptyAction;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
Reference in New Issue
Block a user