TF-1714 Change ButtonBuilder to TMailButton widget
(cherry picked from commit fd536ff648370a60ef89d4428fedd949a3e62ae7)
This commit is contained in:
@@ -52,7 +52,6 @@ export 'presentation/views/text/rich_text_builder.dart';
|
||||
export 'presentation/views/text/text_overflow_builder.dart';
|
||||
export 'presentation/views/responsive/responsive_widget.dart';
|
||||
export 'presentation/views/list/tree_view.dart';
|
||||
export 'presentation/views/button/button_builder.dart';
|
||||
export 'presentation/views/button/icon_button_web.dart';
|
||||
export 'presentation/views/button/tmail_button_widget.dart';
|
||||
export 'presentation/views/image/avatar_builder.dart';
|
||||
|
||||
@@ -200,6 +200,7 @@ extension AppColor on Color {
|
||||
static const colorMailto = Color(0xFFB3B3B3);
|
||||
static const colorEventDescriptionBackground = Color(0x05000000);
|
||||
static const colorLabelQuotas = Color(0xFF818C99);
|
||||
static const colorLabelCancelButton = Color(0xFFAEB7C2);
|
||||
|
||||
static const mapGradientColor = [
|
||||
[Color(0xFF21D4FD), Color(0xFFB721FF)],
|
||||
|
||||
@@ -1,187 +0,0 @@
|
||||
|
||||
import 'package:core/core.dart';
|
||||
import 'package:flutter/material.dart';
|
||||
import 'package:flutter_svg/flutter_svg.dart';
|
||||
|
||||
typedef OnPressActionClick = void Function();
|
||||
typedef OnPressActionWithPositionClick = void Function(RelativeRect? position);
|
||||
|
||||
class ButtonBuilder {
|
||||
OnPressActionClick? _onPressActionClick;
|
||||
OnPressActionWithPositionClick? _onPressActionWithPositionClick;
|
||||
|
||||
BuildContext? _context;
|
||||
final String? _icon;
|
||||
String? _text;
|
||||
double? _size;
|
||||
EdgeInsets? _paddingIcon;
|
||||
bool? _isVertical;
|
||||
Key? _key;
|
||||
Color? _iconColor;
|
||||
TextStyle? _textStyle;
|
||||
BoxDecoration? _decoration;
|
||||
Widget? _iconAction;
|
||||
double? _radiusSplash;
|
||||
double? _maxWidth;
|
||||
EdgeInsets? _padding;
|
||||
EdgeInsets? _margin;
|
||||
String? _tooltip;
|
||||
BoxConstraints? _constraints;
|
||||
|
||||
void key(Key key) {
|
||||
_key = key;
|
||||
}
|
||||
|
||||
void context(BuildContext context) {
|
||||
_context = context;
|
||||
}
|
||||
|
||||
void size(double? size) {
|
||||
_size = size;
|
||||
}
|
||||
|
||||
void maxWidth(double? size) {
|
||||
_maxWidth = size;
|
||||
}
|
||||
|
||||
void iconColor(Color color) {
|
||||
_iconColor = color;
|
||||
}
|
||||
|
||||
void decoration(BoxDecoration decoration) {
|
||||
_decoration = decoration;
|
||||
}
|
||||
|
||||
void addIconAction(Widget icon) {
|
||||
_iconAction = icon;
|
||||
}
|
||||
|
||||
void radiusSplash(double? radius) {
|
||||
_radiusSplash = radius;
|
||||
}
|
||||
|
||||
void padding(EdgeInsets? padding) {
|
||||
_padding = padding;
|
||||
}
|
||||
|
||||
void margin(EdgeInsets? margin) {
|
||||
_margin = margin;
|
||||
}
|
||||
|
||||
void textStyle(TextStyle style) {
|
||||
_textStyle = style;
|
||||
}
|
||||
|
||||
void paddingIcon(EdgeInsets paddingIcon) {
|
||||
_paddingIcon = paddingIcon;
|
||||
}
|
||||
|
||||
void text(String? text, {required bool isVertical}) {
|
||||
_text = text;
|
||||
_isVertical = isVertical;
|
||||
}
|
||||
|
||||
void tooltip(String? message) {
|
||||
_tooltip = message;
|
||||
}
|
||||
|
||||
void addBoxConstraints(BoxConstraints? constraints) {
|
||||
_constraints = constraints;
|
||||
}
|
||||
|
||||
ButtonBuilder(this._icon);
|
||||
|
||||
void onPressActionClick(OnPressActionClick onPressActionClick) {
|
||||
_onPressActionClick = onPressActionClick;
|
||||
}
|
||||
|
||||
void addOnPressActionWithPositionClick(OnPressActionWithPositionClick onPressActionClick) {
|
||||
_onPressActionWithPositionClick = onPressActionClick;
|
||||
}
|
||||
|
||||
Widget build() {
|
||||
return Padding(
|
||||
padding: _margin ?? EdgeInsets.zero,
|
||||
child: Material(
|
||||
color: Colors.transparent,
|
||||
child: InkWell(
|
||||
onTap: _onPressActionClick,
|
||||
onTapDown: (detail) {
|
||||
if (_onPressActionWithPositionClick != null && _context != null) {
|
||||
final screenSize = MediaQuery.of(_context!).size;
|
||||
final offset = detail.globalPosition;
|
||||
final position = RelativeRect.fromLTRB(
|
||||
offset.dx,
|
||||
offset.dy,
|
||||
screenSize.width - offset.dx,
|
||||
screenSize.height - offset.dy,
|
||||
);
|
||||
_onPressActionWithPositionClick?.call(position);
|
||||
}
|
||||
},
|
||||
borderRadius: BorderRadius.circular(_radiusSplash ?? 20),
|
||||
child: Tooltip(
|
||||
message: _tooltip ?? '',
|
||||
child: Container(
|
||||
key: _key,
|
||||
alignment: Alignment.center,
|
||||
color: _decoration == null ? Colors.transparent : null,
|
||||
decoration: _decoration,
|
||||
width: _maxWidth,
|
||||
constraints: _constraints,
|
||||
padding: _padding ?? EdgeInsets.zero,
|
||||
child: _buildBody()
|
||||
),
|
||||
)
|
||||
),
|
||||
),
|
||||
);
|
||||
}
|
||||
|
||||
Widget _buildBody() {
|
||||
if (_text != null) {
|
||||
return _isVertical!
|
||||
? Column(
|
||||
mainAxisSize: MainAxisSize.min,
|
||||
mainAxisAlignment: MainAxisAlignment.center,
|
||||
children: [
|
||||
_buildIcon(),
|
||||
_buildText(),
|
||||
if (_iconAction != null) _iconAction!
|
||||
])
|
||||
: Row(
|
||||
mainAxisSize: MainAxisSize.min,
|
||||
mainAxisAlignment: MainAxisAlignment.center,
|
||||
children: [
|
||||
_buildIcon(),
|
||||
_buildText(),
|
||||
if (_iconAction != null) _iconAction!
|
||||
]);
|
||||
} else {
|
||||
return _buildIcon();
|
||||
}
|
||||
}
|
||||
|
||||
Widget _buildIcon() => Padding(
|
||||
padding: _paddingIcon ?? const EdgeInsets.all(10),
|
||||
child: SvgPicture.asset(
|
||||
_icon ?? '',
|
||||
width: _size ?? 24,
|
||||
height: _size ?? 24,
|
||||
fit: BoxFit.fill,
|
||||
colorFilter: _iconColor.asFilter()
|
||||
));
|
||||
|
||||
Widget _buildText() {
|
||||
return Text(
|
||||
_text ?? '',
|
||||
maxLines: 1,
|
||||
softWrap: CommonTextStyle.defaultSoftWrap,
|
||||
overflow: CommonTextStyle.defaultTextOverFlow,
|
||||
style: _textStyle ?? const TextStyle(
|
||||
fontSize: 12,
|
||||
color: AppColor.colorTextButton
|
||||
),
|
||||
);
|
||||
}
|
||||
}
|
||||
@@ -99,32 +99,6 @@ Widget buildIconWebHasPosition(BuildContext context, {
|
||||
);
|
||||
}
|
||||
|
||||
Widget buildTextCircleButton(String text, {
|
||||
TextStyle? textStyle,
|
||||
IconWebCallback? onTap,
|
||||
}) {
|
||||
return Material(
|
||||
shape: const CircleBorder(),
|
||||
color: Colors.transparent,
|
||||
child: TextButton(
|
||||
style: ButtonStyle(
|
||||
overlayColor: MaterialStateProperty.resolveWith<Color>((Set<MaterialState> states) => AppColor.colorFocusButton),
|
||||
shape: MaterialStateProperty.all(const CircleBorder()),
|
||||
padding: MaterialStateProperty.resolveWith<EdgeInsets>((Set<MaterialState> states) => EdgeInsets.zero),
|
||||
elevation: MaterialStateProperty.resolveWith<double>((Set<MaterialState> states) => 0)),
|
||||
onPressed: () => onTap?.call(),
|
||||
child: Text(
|
||||
text,
|
||||
style: textStyle ?? const TextStyle(
|
||||
fontWeight: FontWeight.normal,
|
||||
fontSize: 15,
|
||||
color: AppColor.lineItemListColor
|
||||
)
|
||||
)
|
||||
)
|
||||
);
|
||||
}
|
||||
|
||||
Widget buildTextIcon(String text, {
|
||||
TextStyle? textStyle,
|
||||
EdgeInsetsGeometry? padding,
|
||||
|
||||
@@ -14,15 +14,24 @@ class TMailButtonWidget extends StatelessWidget {
|
||||
final double? width;
|
||||
final double maxWidth;
|
||||
final double maxHeight;
|
||||
final double minWidth;
|
||||
final String? tooltipMessage;
|
||||
final Color? backgroundColor;
|
||||
final EdgeInsetsGeometry? padding;
|
||||
final EdgeInsetsGeometry? margin;
|
||||
final String text;
|
||||
final String? icon;
|
||||
final bool verticalDirection;
|
||||
final double iconSize;
|
||||
final double? iconSize;
|
||||
final double iconSpace;
|
||||
final Color? iconColor;
|
||||
final TextStyle? textStyle;
|
||||
final String? trailingIcon;
|
||||
final double? trailingIconSize;
|
||||
final Color? trailingIconColor;
|
||||
final List<BoxShadow>? boxShadow;
|
||||
final TextAlign? textAlign;
|
||||
final bool flexibleText;
|
||||
|
||||
const TMailButtonWidget({
|
||||
super.key,
|
||||
@@ -33,14 +42,23 @@ class TMailButtonWidget extends StatelessWidget {
|
||||
this.width,
|
||||
this.maxWidth = double.infinity,
|
||||
this.maxHeight = double.infinity,
|
||||
this.minWidth = 0,
|
||||
this.tooltipMessage,
|
||||
this.backgroundColor,
|
||||
this.padding,
|
||||
this.verticalDirection = false,
|
||||
this.icon,
|
||||
this.iconSize = 24,
|
||||
this.iconSize,
|
||||
this.iconColor,
|
||||
this.textStyle,
|
||||
this.iconSpace = 8,
|
||||
this.trailingIcon,
|
||||
this.trailingIconSize,
|
||||
this.trailingIconColor,
|
||||
this.boxShadow,
|
||||
this.margin,
|
||||
this.textAlign,
|
||||
this.flexibleText = false,
|
||||
});
|
||||
|
||||
factory TMailButtonWidget.fromIcon({
|
||||
@@ -52,14 +70,23 @@ class TMailButtonWidget extends StatelessWidget {
|
||||
double? width,
|
||||
double maxWidth = double.infinity,
|
||||
double maxHeight = double.infinity,
|
||||
double minWidth = 0,
|
||||
String? tooltipMessage,
|
||||
Color? backgroundColor,
|
||||
EdgeInsetsGeometry? padding,
|
||||
String text = '',
|
||||
bool verticalDirection = false,
|
||||
double iconSize = 24,
|
||||
double? iconSize,
|
||||
Color? iconColor,
|
||||
TextStyle? textStyle,
|
||||
double iconSpace = 8,
|
||||
String? trailingIcon,
|
||||
double? trailingIconSize,
|
||||
Color? trailingIconColor,
|
||||
List<BoxShadow>? boxShadow,
|
||||
EdgeInsetsGeometry? margin,
|
||||
TextAlign? textAlign,
|
||||
bool flexibleText = false,
|
||||
}) {
|
||||
return TMailButtonWidget(
|
||||
key: key,
|
||||
@@ -70,6 +97,7 @@ class TMailButtonWidget extends StatelessWidget {
|
||||
width: width,
|
||||
maxWidth : maxWidth,
|
||||
maxHeight: maxHeight,
|
||||
minWidth: minWidth,
|
||||
tooltipMessage: tooltipMessage,
|
||||
backgroundColor: backgroundColor,
|
||||
padding: padding,
|
||||
@@ -78,6 +106,14 @@ class TMailButtonWidget extends StatelessWidget {
|
||||
iconSize: iconSize,
|
||||
iconColor: iconColor,
|
||||
textStyle: textStyle,
|
||||
iconSpace: iconSpace,
|
||||
trailingIcon: trailingIcon,
|
||||
trailingIconSize: trailingIconSize,
|
||||
trailingIconColor: trailingIconColor,
|
||||
boxShadow: boxShadow,
|
||||
margin: margin,
|
||||
textAlign: textAlign,
|
||||
flexibleText: flexibleText,
|
||||
);
|
||||
}
|
||||
|
||||
@@ -88,7 +124,6 @@ class TMailButtonWidget extends StatelessWidget {
|
||||
if (icon != null && text.isNotEmpty) {
|
||||
if (verticalDirection) {
|
||||
childWidget = Column(
|
||||
mainAxisSize: MainAxisSize.min,
|
||||
children: [
|
||||
SvgPicture.asset(
|
||||
icon!,
|
||||
@@ -97,18 +132,31 @@ class TMailButtonWidget extends StatelessWidget {
|
||||
fit: BoxFit.fill,
|
||||
colorFilter: iconColor?.asFilter()
|
||||
),
|
||||
SizedBox(height: iconSpace),
|
||||
Text(
|
||||
text,
|
||||
textAlign: textAlign,
|
||||
style: textStyle ?? const TextStyle(
|
||||
fontSize: 12,
|
||||
color: AppColor.colorTextButtonHeaderThread
|
||||
),
|
||||
),
|
||||
if (trailingIcon != null)
|
||||
Padding(
|
||||
padding: EdgeInsetsDirectional.only(top: iconSpace),
|
||||
child: SvgPicture.asset(
|
||||
trailingIcon!,
|
||||
width: trailingIconSize,
|
||||
height: trailingIconSize,
|
||||
fit: BoxFit.fill,
|
||||
colorFilter: trailingIconColor?.asFilter()
|
||||
),
|
||||
),
|
||||
]
|
||||
);
|
||||
} else {
|
||||
childWidget = Row(
|
||||
mainAxisSize: MainAxisSize.min,
|
||||
mainAxisAlignment: MainAxisAlignment.center,
|
||||
children: [
|
||||
SvgPicture.asset(
|
||||
icon!,
|
||||
@@ -117,13 +165,38 @@ class TMailButtonWidget extends StatelessWidget {
|
||||
fit: BoxFit.fill,
|
||||
colorFilter: iconColor?.asFilter()
|
||||
),
|
||||
Text(
|
||||
text,
|
||||
style: textStyle ?? const TextStyle(
|
||||
fontSize: 12,
|
||||
color: AppColor.colorTextButtonHeaderThread
|
||||
SizedBox(width: iconSpace),
|
||||
if (flexibleText)
|
||||
Flexible(
|
||||
child: Text(
|
||||
text,
|
||||
textAlign: textAlign,
|
||||
style: textStyle ?? const TextStyle(
|
||||
fontSize: 12,
|
||||
color: AppColor.colorTextButtonHeaderThread
|
||||
),
|
||||
),
|
||||
)
|
||||
else
|
||||
Text(
|
||||
text,
|
||||
textAlign: textAlign,
|
||||
style: textStyle ?? const TextStyle(
|
||||
fontSize: 12,
|
||||
color: AppColor.colorTextButtonHeaderThread
|
||||
),
|
||||
),
|
||||
if (trailingIcon != null)
|
||||
Padding(
|
||||
padding: EdgeInsetsDirectional.only(start: iconSpace),
|
||||
child: SvgPicture.asset(
|
||||
trailingIcon!,
|
||||
width: trailingIconSize,
|
||||
height: trailingIconSize,
|
||||
fit: BoxFit.fill,
|
||||
colorFilter: trailingIconColor?.asFilter()
|
||||
),
|
||||
),
|
||||
),
|
||||
]
|
||||
);
|
||||
}
|
||||
@@ -138,6 +211,7 @@ class TMailButtonWidget extends StatelessWidget {
|
||||
} else {
|
||||
childWidget = Text(
|
||||
text,
|
||||
textAlign: textAlign,
|
||||
style: textStyle ?? const TextStyle(
|
||||
fontSize: 12,
|
||||
color: AppColor.colorTextButtonHeaderThread
|
||||
@@ -152,9 +226,12 @@ class TMailButtonWidget extends StatelessWidget {
|
||||
width: width,
|
||||
maxWidth: maxWidth,
|
||||
maxHeight: maxHeight,
|
||||
minWidth: minWidth,
|
||||
tooltipMessage: tooltipMessage,
|
||||
backgroundColor: backgroundColor,
|
||||
padding: padding,
|
||||
margin: margin,
|
||||
boxShadow: boxShadow,
|
||||
child: childWidget,
|
||||
);
|
||||
}
|
||||
|
||||
@@ -13,9 +13,12 @@ class TMailContainerWidget extends StatelessWidget {
|
||||
final double? width;
|
||||
final double maxWidth;
|
||||
final double maxHeight;
|
||||
final double minWidth;
|
||||
final String? tooltipMessage;
|
||||
final Color? backgroundColor;
|
||||
final EdgeInsetsGeometry? padding;
|
||||
final EdgeInsetsGeometry? margin;
|
||||
final List<BoxShadow>? boxShadow;
|
||||
|
||||
const TMailContainerWidget({
|
||||
super.key,
|
||||
@@ -26,14 +29,17 @@ class TMailContainerWidget extends StatelessWidget {
|
||||
this.width,
|
||||
this.maxWidth = double.infinity,
|
||||
this.maxHeight = double.infinity,
|
||||
this.minWidth = 0,
|
||||
this.tooltipMessage,
|
||||
this.backgroundColor,
|
||||
this.padding,
|
||||
this.boxShadow,
|
||||
this.margin,
|
||||
});
|
||||
|
||||
@override
|
||||
Widget build(BuildContext context) {
|
||||
return Material(
|
||||
final materialChild = Material(
|
||||
color: Colors.transparent,
|
||||
child: InkWell(
|
||||
onTap: onTapActionCallback,
|
||||
@@ -59,9 +65,14 @@ class TMailContainerWidget extends StatelessWidget {
|
||||
decoration: BoxDecoration(
|
||||
color: backgroundColor ?? AppColor.colorButtonHeaderThread,
|
||||
borderRadius: BorderRadius.all(Radius.circular(borderRadius)),
|
||||
boxShadow: boxShadow
|
||||
),
|
||||
width: width,
|
||||
constraints: BoxConstraints(maxWidth: maxWidth, maxHeight: maxHeight),
|
||||
constraints: BoxConstraints(
|
||||
maxWidth: maxWidth,
|
||||
maxHeight: maxHeight,
|
||||
minWidth: minWidth
|
||||
),
|
||||
padding: padding ?? const EdgeInsetsDirectional.all(8),
|
||||
child: child
|
||||
)
|
||||
@@ -71,13 +82,24 @@ class TMailContainerWidget extends StatelessWidget {
|
||||
decoration: BoxDecoration(
|
||||
color: backgroundColor ?? AppColor.colorButtonHeaderThread,
|
||||
borderRadius: BorderRadius.all(Radius.circular(borderRadius)),
|
||||
boxShadow: boxShadow
|
||||
),
|
||||
width: width,
|
||||
constraints: BoxConstraints(maxWidth: maxWidth, maxHeight: maxHeight),
|
||||
constraints: BoxConstraints(
|
||||
maxWidth: maxWidth,
|
||||
maxHeight: maxHeight,
|
||||
minWidth: minWidth
|
||||
),
|
||||
padding: padding ?? const EdgeInsetsDirectional.all(8),
|
||||
child: child
|
||||
)
|
||||
),
|
||||
);
|
||||
|
||||
if (margin != null) {
|
||||
return Padding(padding: margin!, child: materialChild);
|
||||
} else {
|
||||
return materialChild;
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -497,7 +497,7 @@ abstract class BaseComposerView extends GetWidget<ComposerController>
|
||||
textStyle: const TextStyle(
|
||||
fontWeight: FontWeight.w500,
|
||||
fontSize: 17,
|
||||
color: AppColor.lineItemListColor
|
||||
color: AppColor.colorLabelCancelButton
|
||||
),
|
||||
backgroundColor: AppColor.emailAddressChipColor,
|
||||
width: 150,
|
||||
|
||||
@@ -65,6 +65,7 @@ class EmailView extends GetWidget<SingleEmailController> with AppLoaderMixin {
|
||||
right: responsiveUtils.isLandscapeMobile(context),
|
||||
left: responsiveUtils.isLandscapeMobile(context),
|
||||
child: Container(
|
||||
clipBehavior: Clip.antiAlias,
|
||||
decoration: responsiveUtils.isWebDesktop(context)
|
||||
? BoxDecoration(
|
||||
borderRadius: BorderRadius.circular(20),
|
||||
@@ -118,8 +119,10 @@ class EmailView extends GetWidget<SingleEmailController> with AppLoaderMixin {
|
||||
: _buildSingleEmailView(context, email);
|
||||
}),
|
||||
),
|
||||
const Divider(color: AppColor.colorDividerHorizontal, height: 1),
|
||||
_buildBottomBar(context, email),
|
||||
BottomBarMailWidgetBuilder(
|
||||
email,
|
||||
onPressEmailActionClick: controller.pressEmailAction
|
||||
),
|
||||
]);
|
||||
}
|
||||
|
||||
@@ -225,12 +228,6 @@ class EmailView extends GetWidget<SingleEmailController> with AppLoaderMixin {
|
||||
];
|
||||
}
|
||||
|
||||
Widget _buildBottomBar(BuildContext context, PresentationEmail presentationEmail) {
|
||||
return BottomBarMailWidgetBuilder(
|
||||
presentationEmail,
|
||||
onPressEmailActionClick: (emailActionType) => controller.pressEmailAction(emailActionType));
|
||||
}
|
||||
|
||||
Widget _buildEmailBody(BuildContext context, PresentationEmail email) {
|
||||
if (PlatformInfo.isWeb && !email.hasCalendarEvent) {
|
||||
return _buildEmailMessage(context, email);
|
||||
|
||||
@@ -1,7 +1,12 @@
|
||||
import 'package:core/core.dart';
|
||||
import 'package:core/presentation/extensions/color_extension.dart';
|
||||
import 'package:core/presentation/resources/image_paths.dart';
|
||||
import 'package:core/presentation/utils/responsive_utils.dart';
|
||||
import 'package:core/presentation/views/button/tmail_button_widget.dart';
|
||||
import 'package:flutter/material.dart';
|
||||
import 'package:get/get.dart';
|
||||
import 'package:model/model.dart';
|
||||
import 'package:model/email/email_action_type.dart';
|
||||
import 'package:model/email/presentation_email.dart';
|
||||
import 'package:model/extensions/presentation_email_extension.dart';
|
||||
import 'package:tmail_ui_user/main/localizations/app_localizations.dart';
|
||||
|
||||
typedef OnPressEmailActionClick = void Function(EmailActionType emailActionType);
|
||||
@@ -27,69 +32,96 @@ class BottomBarMailWidgetBuilder extends StatelessWidget {
|
||||
final responsiveUtils = Get.find<ResponsiveUtils>();
|
||||
|
||||
return Container(
|
||||
alignment: Alignment.center,
|
||||
decoration: responsiveUtils.isWebDesktop(context)
|
||||
? const BoxDecoration(
|
||||
color: Colors.white,
|
||||
borderRadius: BorderRadius.only(
|
||||
bottomRight: Radius.circular(20),
|
||||
bottomLeft: Radius.circular(20)))
|
||||
: const BoxDecoration(color: Colors.white),
|
||||
child: Row(
|
||||
mainAxisAlignment: MainAxisAlignment.center,
|
||||
crossAxisAlignment: CrossAxisAlignment.center,
|
||||
decoration: const BoxDecoration(
|
||||
border: Border(
|
||||
top: BorderSide(
|
||||
color: AppColor.colorDividerHorizontal,
|
||||
width: 0.5,
|
||||
)
|
||||
),
|
||||
),
|
||||
child: IntrinsicHeight(
|
||||
child: Row(
|
||||
children: [
|
||||
if (_presentationEmail.numberOfAllEmailAddress() > 1)
|
||||
Expanded(child: (ButtonBuilder(imagePaths.icReplyAll)
|
||||
..key(const Key('button_reply_all_message'))
|
||||
..size(15)
|
||||
..radiusSplash(0)
|
||||
..padding(const EdgeInsets.only(top: 5, bottom: 8))
|
||||
..textStyle(TextStyle(
|
||||
Expanded(
|
||||
child: TMailButtonWidget(
|
||||
key: const Key('reply_all_emails_button'),
|
||||
text: AppLocalizations.of(context).reply_all,
|
||||
icon: imagePaths.icReplyAll,
|
||||
borderRadius: 0,
|
||||
iconSize: 15,
|
||||
textAlign: TextAlign.center,
|
||||
flexibleText: true,
|
||||
padding: const EdgeInsets.symmetric(horizontal: 8, vertical: 12),
|
||||
backgroundColor: Colors.transparent,
|
||||
textStyle: TextStyle(
|
||||
fontSize: responsiveUtils.isPortraitMobile(context) ? 12 : 16,
|
||||
color: AppColor.colorTextButton))
|
||||
..onPressActionClick(() =>onPressEmailActionClick?.call(EmailActionType.replyAll))
|
||||
..text(AppLocalizations.of(context).reply_all,
|
||||
isVertical: responsiveUtils.isPortraitMobile(context)))
|
||||
.build()),
|
||||
Expanded(child: (ButtonBuilder(imagePaths.icReply)
|
||||
..key(const Key('button_reply_message'))
|
||||
..size(20)
|
||||
..radiusSplash(0)
|
||||
..padding(const EdgeInsets.only(top: 5, bottom: 8))
|
||||
..textStyle(TextStyle(
|
||||
color: AppColor.colorTextButton
|
||||
),
|
||||
verticalDirection: responsiveUtils.isPortraitMobile(context),
|
||||
onTapActionCallback: () => onPressEmailActionClick?.call(EmailActionType.replyAll),
|
||||
),
|
||||
),
|
||||
Expanded(
|
||||
child: TMailButtonWidget(
|
||||
key: const Key('reply_email_button'),
|
||||
text: AppLocalizations.of(context).reply,
|
||||
icon: imagePaths.icReply,
|
||||
borderRadius: 0,
|
||||
iconSize: 20,
|
||||
textAlign: TextAlign.center,
|
||||
flexibleText: true,
|
||||
padding: const EdgeInsets.symmetric(horizontal: 8, vertical: 12),
|
||||
backgroundColor: Colors.transparent,
|
||||
textStyle: TextStyle(
|
||||
fontSize: responsiveUtils.isPortraitMobile(context) ? 12 : 16,
|
||||
color: AppColor.colorTextButton))
|
||||
..onPressActionClick(() => onPressEmailActionClick?.call(EmailActionType.reply))
|
||||
..text(AppLocalizations.of(context).reply,
|
||||
isVertical: responsiveUtils.isPortraitMobile(context)))
|
||||
.build()),
|
||||
Expanded(child: (ButtonBuilder(imagePaths.icForward)
|
||||
..key(const Key('button_forward_message'))
|
||||
..size(20)
|
||||
..radiusSplash(0)
|
||||
..padding(const EdgeInsets.only(top: 5, bottom: 8))
|
||||
..textStyle(TextStyle(
|
||||
color: AppColor.colorTextButton
|
||||
),
|
||||
verticalDirection: responsiveUtils.isPortraitMobile(context),
|
||||
onTapActionCallback: () => onPressEmailActionClick?.call(EmailActionType.reply),
|
||||
),
|
||||
),
|
||||
Expanded(
|
||||
child: TMailButtonWidget(
|
||||
key: const Key('forward_email_button'),
|
||||
text: AppLocalizations.of(context).forward,
|
||||
icon: imagePaths.icForward,
|
||||
borderRadius: 0,
|
||||
iconSize: 20,
|
||||
textAlign: TextAlign.center,
|
||||
flexibleText: true,
|
||||
padding: const EdgeInsets.symmetric(horizontal: 8, vertical: 12),
|
||||
backgroundColor: Colors.transparent,
|
||||
textStyle: TextStyle(
|
||||
fontSize: responsiveUtils.isPortraitMobile(context) ? 12 : 16,
|
||||
color: AppColor.colorTextButton))
|
||||
..onPressActionClick(() => onPressEmailActionClick?.call(EmailActionType.forward))
|
||||
..text(AppLocalizations.of(context).forward,
|
||||
isVertical: responsiveUtils.isPortraitMobile(context)))
|
||||
.build()),
|
||||
if (responsiveUtils.mailboxDashboardOnlyHasEmailView(context))
|
||||
Expanded(child: (ButtonBuilder(imagePaths.icNewMessage)
|
||||
..key(const Key('button_new_message'))
|
||||
..size(20)
|
||||
..radiusSplash(0)
|
||||
..padding(const EdgeInsets.only(top: 5, bottom: 8))
|
||||
..textStyle(TextStyle(
|
||||
fontSize: responsiveUtils.isPortraitMobile(context) ? 12 : 16,
|
||||
color: AppColor.colorTextButton))
|
||||
..onPressActionClick(() => onPressEmailActionClick?.call(EmailActionType.compose))
|
||||
..text(AppLocalizations.of(context).new_message,
|
||||
isVertical: responsiveUtils.isPortraitMobile(context)))
|
||||
.build())
|
||||
color: AppColor.colorTextButton
|
||||
),
|
||||
verticalDirection: responsiveUtils.isPortraitMobile(context),
|
||||
onTapActionCallback: () => onPressEmailActionClick?.call(EmailActionType.forward),
|
||||
),
|
||||
),
|
||||
Expanded(
|
||||
child: TMailButtonWidget(
|
||||
key: const Key('compose_new_email_button'),
|
||||
text: AppLocalizations.of(context).new_message,
|
||||
icon: imagePaths.icNewMessage,
|
||||
borderRadius: 0,
|
||||
iconSize: 20,
|
||||
textAlign: TextAlign.center,
|
||||
flexibleText: true,
|
||||
padding: const EdgeInsets.symmetric(horizontal: 8, vertical: 12),
|
||||
backgroundColor: Colors.transparent,
|
||||
textStyle: TextStyle(
|
||||
fontSize: responsiveUtils.isPortraitMobile(context) ? 12 : 16,
|
||||
color: AppColor.colorTextButton
|
||||
),
|
||||
verticalDirection: responsiveUtils.isPortraitMobile(context),
|
||||
onTapActionCallback: () => onPressEmailActionClick?.call(EmailActionType.compose),
|
||||
),
|
||||
),
|
||||
]
|
||||
),
|
||||
)
|
||||
);
|
||||
}
|
||||
|
||||
@@ -57,7 +57,21 @@ class MailboxView extends BaseMailboxView {
|
||||
Obx(() {
|
||||
if (controller.isSelectionEnabled()
|
||||
&& controller.listActionOfMailboxSelected.isNotEmpty) {
|
||||
return _buildOptionSelectionMailbox(context);
|
||||
return SafeArea(
|
||||
right: false,
|
||||
top: false,
|
||||
child: BottomBarSelectionMailboxWidget(
|
||||
controller.listMailboxSelected,
|
||||
controller.listActionOfMailboxSelected,
|
||||
onMailboxActionsClick: (actions, listMailboxSelected) {
|
||||
return controller.pressMailboxSelectionAction(
|
||||
context,
|
||||
actions,
|
||||
listMailboxSelected
|
||||
);
|
||||
}
|
||||
)
|
||||
);
|
||||
} else {
|
||||
return const SizedBox.shrink();
|
||||
}
|
||||
@@ -369,35 +383,6 @@ class MailboxView extends BaseMailboxView {
|
||||
}).toList() ?? <Widget>[];
|
||||
}
|
||||
|
||||
Widget _buildOptionSelectionMailbox(BuildContext context) {
|
||||
return Column(
|
||||
mainAxisSize: MainAxisSize.min,
|
||||
children: [
|
||||
const Divider(
|
||||
color: AppColor.lineItemListColor,
|
||||
height: 1,
|
||||
thickness: 0.2
|
||||
),
|
||||
SafeArea(
|
||||
right: false,
|
||||
top: false,
|
||||
child: BottomBarSelectionMailboxWidget(
|
||||
responsiveUtils,
|
||||
imagePaths,
|
||||
controller.listMailboxSelected,
|
||||
controller.listActionOfMailboxSelected,
|
||||
onMailboxActionsClick: (actions, listMailboxSelected) =>
|
||||
controller.pressMailboxSelectionAction(
|
||||
context,
|
||||
actions,
|
||||
listMailboxSelected
|
||||
)
|
||||
)
|
||||
)
|
||||
]
|
||||
);
|
||||
}
|
||||
|
||||
Widget _buildVersionInformation(BuildContext context, PackageInfo packageInfo) {
|
||||
return Container(
|
||||
color: AppColor.colorBgMailbox,
|
||||
|
||||
+32
-22
@@ -1,8 +1,9 @@
|
||||
import 'package:core/presentation/extensions/color_extension.dart';
|
||||
import 'package:core/presentation/resources/image_paths.dart';
|
||||
import 'package:core/presentation/utils/responsive_utils.dart';
|
||||
import 'package:core/presentation/views/button/button_builder.dart';
|
||||
import 'package:core/presentation/views/button/tmail_button_widget.dart';
|
||||
import 'package:flutter/material.dart';
|
||||
import 'package:get/get.dart';
|
||||
import 'package:model/mailbox/presentation_mailbox.dart';
|
||||
import 'package:tmail_ui_user/features/mailbox/presentation/model/mailbox_actions.dart';
|
||||
|
||||
@@ -10,15 +11,11 @@ typedef OnMailboxActionsClick = void Function(MailboxActions, List<PresentationM
|
||||
|
||||
class BottomBarSelectionMailboxWidget extends StatelessWidget {
|
||||
|
||||
final ResponsiveUtils _responsiveUtils;
|
||||
final ImagePaths _imagePaths;
|
||||
final List<PresentationMailbox> _listSelectionMailbox;
|
||||
final List<MailboxActions> _listMailboxActions;
|
||||
final OnMailboxActionsClick onMailboxActionsClick;
|
||||
|
||||
const BottomBarSelectionMailboxWidget(
|
||||
this._responsiveUtils,
|
||||
this._imagePaths,
|
||||
this._listSelectionMailbox,
|
||||
this._listMailboxActions,
|
||||
{
|
||||
@@ -30,23 +27,36 @@ class BottomBarSelectionMailboxWidget extends StatelessWidget {
|
||||
|
||||
@override
|
||||
Widget build(BuildContext context) {
|
||||
return Row(children: _listMailboxActions
|
||||
.map((action) => _buildMailboxActionButton(context, action))
|
||||
.toList());
|
||||
}
|
||||
final responsiveUtils = Get.find<ResponsiveUtils>();
|
||||
final imagePaths = Get.find<ImagePaths>();
|
||||
|
||||
Widget _buildMailboxActionButton(BuildContext context, MailboxActions actions) {
|
||||
return Expanded(child: (ButtonBuilder(actions.getContextMenuIcon(_imagePaths))
|
||||
..radiusSplash(8)
|
||||
..padding(const EdgeInsets.all(8))
|
||||
..tooltip(actions.getTitleContextMenu(context))
|
||||
..textStyle(const TextStyle(fontSize: 12, color: AppColor.colorTextButton))
|
||||
..iconColor(AppColor.colorTextButton)
|
||||
..onPressActionClick(() => onMailboxActionsClick.call(actions, _listSelectionMailbox))
|
||||
..text(
|
||||
_responsiveUtils.isLandscapeMobile(context) ? null : actions.getTitleContextMenu(context),
|
||||
isVertical: true
|
||||
)
|
||||
).build());
|
||||
return Container(
|
||||
decoration: const BoxDecoration(
|
||||
border: Border(top: BorderSide(
|
||||
color: AppColor.colorDividerHorizontal,
|
||||
width: 0.5,
|
||||
)),
|
||||
),
|
||||
child: IntrinsicHeight(
|
||||
child: Row(children: _listMailboxActions
|
||||
.map((action) {
|
||||
return Expanded(child: TMailButtonWidget(
|
||||
key: Key('${action.name}_button'),
|
||||
text: responsiveUtils.isLandscapeMobile(context)
|
||||
? ''
|
||||
: action.getTitleContextMenu(context),
|
||||
icon: action.getContextMenuIcon(imagePaths),
|
||||
borderRadius: 0,
|
||||
backgroundColor: Colors.transparent,
|
||||
flexibleText: true,
|
||||
tooltipMessage: action.getTitleContextMenu(context),
|
||||
textStyle: const TextStyle(fontSize: 12, color: AppColor.colorTextButton),
|
||||
onTapActionCallback: () => onMailboxActionsClick.call(action, _listSelectionMailbox),
|
||||
));
|
||||
})
|
||||
.toList()
|
||||
),
|
||||
),
|
||||
);
|
||||
}
|
||||
}
|
||||
+4
@@ -2067,6 +2067,10 @@ class MailboxDashBoardController extends ReloadableController {
|
||||
await Future.delayed(const Duration(milliseconds: 500));
|
||||
dispatchAction(RefreshAllEmailAction());
|
||||
}
|
||||
|
||||
void selectAllEmailAction() {
|
||||
dispatchAction(SelectionAllEmailAction());
|
||||
}
|
||||
|
||||
@override
|
||||
void onClose() {
|
||||
|
||||
@@ -397,81 +397,54 @@ class MailboxDashBoardView extends BaseMailboxDashBoardView {
|
||||
);
|
||||
}),
|
||||
const SizedBox(width: 16),
|
||||
(ButtonBuilder(imagePaths.icSelectAll)
|
||||
..key(const Key('button_select_all'))
|
||||
..decoration(const BoxDecoration(
|
||||
borderRadius: BorderRadius.all(Radius.circular(10)),
|
||||
color: AppColor.colorButtonHeaderThread))
|
||||
..paddingIcon(EdgeInsets.only(
|
||||
right: AppUtils.isDirectionRTL(context) ? 0 : 8,
|
||||
left: AppUtils.isDirectionRTL(context) ? 8 : 0
|
||||
))
|
||||
..size(16)
|
||||
..radiusSplash(10)
|
||||
..padding(const EdgeInsets.symmetric(horizontal: 12, vertical: 8))
|
||||
..textStyle(const TextStyle(fontSize: 12, color: AppColor.colorTextButtonHeaderThread))
|
||||
..onPressActionClick(() => controller.dispatchAction(SelectionAllEmailAction()))
|
||||
..text(AppLocalizations.of(context).select_all, isVertical: false))
|
||||
.build(),
|
||||
TMailButtonWidget(
|
||||
key: const Key('select_all_emails_button'),
|
||||
text: AppLocalizations.of(context).select_all,
|
||||
icon: imagePaths.icSelectAll,
|
||||
borderRadius: 10,
|
||||
iconSize: 16,
|
||||
padding: const EdgeInsetsDirectional.symmetric(horizontal: 12, vertical: 8),
|
||||
onTapActionCallback: controller.selectAllEmailAction,
|
||||
),
|
||||
if (controller.isAbleMarkAllAsRead())
|
||||
Padding(
|
||||
padding: EdgeInsets.only(
|
||||
left: AppUtils.isDirectionRTL(context) ? 0 : 16,
|
||||
right: AppUtils.isDirectionRTL(context) ? 16 : 0,
|
||||
padding: const EdgeInsetsDirectional.only(start: 16),
|
||||
child: TMailButtonWidget(
|
||||
key: const Key('mark_as_read_emails_button'),
|
||||
text: AppLocalizations.of(context).mark_all_as_read,
|
||||
icon: imagePaths.icSelectAll,
|
||||
borderRadius: 10,
|
||||
iconSize: 16,
|
||||
padding: const EdgeInsetsDirectional.symmetric(horizontal: 12, vertical: 8),
|
||||
onTapActionCallback: () => controller.markAsReadMailboxAction(context),
|
||||
),
|
||||
child: (ButtonBuilder(imagePaths.icMarkAllAsRead)
|
||||
..key(const Key('button_mark_all_as_read'))
|
||||
..decoration(const BoxDecoration(
|
||||
borderRadius:BorderRadius.all(Radius.circular(10)),
|
||||
color: AppColor.colorButtonHeaderThread))
|
||||
..paddingIcon(const EdgeInsets.only(right: 8))
|
||||
..size(16)
|
||||
..padding(const EdgeInsets.symmetric(horizontal: 12, vertical: 8))
|
||||
..radiusSplash(10)
|
||||
..textStyle(const TextStyle(
|
||||
fontSize: 12,
|
||||
color: AppColor.colorTextButtonHeaderThread))
|
||||
..onPressActionClick(() => controller.markAsReadMailboxAction(context))
|
||||
..text(AppLocalizations.of(context).mark_all_as_read, isVertical: false))
|
||||
.build(),
|
||||
),
|
||||
const SizedBox(width: 16),
|
||||
Obx(() => (ButtonBuilder(controller.filterMessageOption.value.getIconSelected(imagePaths))
|
||||
..key(const Key('button_filter_messages'))
|
||||
..context(context)
|
||||
..decoration(BoxDecoration(
|
||||
borderRadius: const BorderRadius.all(Radius.circular(10)),
|
||||
color: controller.filterMessageOption.value.getBackgroundColor()))
|
||||
..paddingIcon(EdgeInsets.only(
|
||||
right: AppUtils.isDirectionRTL(context) ? 0 : 8,
|
||||
left: AppUtils.isDirectionRTL(context) ? 8 : 0,
|
||||
))
|
||||
..size(16)
|
||||
..padding(const EdgeInsets.symmetric(horizontal: 12, vertical: 8))
|
||||
..radiusSplash(10)
|
||||
..textStyle(controller.filterMessageOption.value.getTextStyle())
|
||||
..addIconAction(Padding(
|
||||
padding: EdgeInsets.only(
|
||||
left: AppUtils.isDirectionRTL(context) ? 0 : 8,
|
||||
right: AppUtils.isDirectionRTL(context) ? 8 : 0,
|
||||
),
|
||||
child: SvgPicture.asset(imagePaths.icArrowDown, fit: BoxFit.fill)))
|
||||
..addOnPressActionWithPositionClick((position) =>
|
||||
controller.openPopupMenuAction(
|
||||
context,
|
||||
position,
|
||||
popupMenuFilterEmailActionTile(
|
||||
context,
|
||||
controller.filterMessageOption.value,
|
||||
(option) => controller.dispatchAction(FilterMessageAction(context, option)),
|
||||
isSearchEmailRunning: controller.searchController.isSearchEmailRunning
|
||||
)
|
||||
)
|
||||
Obx(() => TMailButtonWidget(
|
||||
key: const Key('filter_emails_button'),
|
||||
text: controller.filterMessageOption.value == FilterMessageOption.all
|
||||
? AppLocalizations.of(context).filter_messages
|
||||
: controller.filterMessageOption.value.getTitle(context),
|
||||
icon: controller.filterMessageOption.value.getIconSelected(imagePaths),
|
||||
borderRadius: 10,
|
||||
iconSize: 16,
|
||||
padding: const EdgeInsetsDirectional.symmetric(horizontal: 12, vertical: 8),
|
||||
backgroundColor: controller.filterMessageOption.value.getBackgroundColor(),
|
||||
textStyle: controller.filterMessageOption.value.getTextStyle(),
|
||||
trailingIcon: imagePaths.icArrowDown,
|
||||
onTapActionAtPositionCallback: (position) {
|
||||
return controller.openPopupMenuAction(
|
||||
context,
|
||||
position,
|
||||
popupMenuFilterEmailActionTile(
|
||||
context,
|
||||
controller.filterMessageOption.value,
|
||||
(option) => controller.dispatchAction(FilterMessageAction(context, option)),
|
||||
isSearchEmailRunning: controller.searchController.isSearchEmailRunning
|
||||
)
|
||||
..text(controller.filterMessageOption.value == FilterMessageOption.all
|
||||
? AppLocalizations.of(context).filter_messages
|
||||
: controller.filterMessageOption.value.getTitle(context), isVertical: false))
|
||||
.build()),
|
||||
);
|
||||
},
|
||||
)),
|
||||
]);
|
||||
}
|
||||
|
||||
@@ -682,37 +655,36 @@ class MailboxDashBoardView extends BaseMailboxDashBoardView {
|
||||
|
||||
Widget _buildComposerButton(BuildContext context) {
|
||||
return Container(
|
||||
padding: const EdgeInsets.all(16),
|
||||
color: Colors.transparent,
|
||||
padding: const EdgeInsetsDirectional.only(
|
||||
start: 16,
|
||||
end: 16,
|
||||
top: 16,
|
||||
bottom: 8
|
||||
),
|
||||
width: ResponsiveUtils.defaultSizeMenu,
|
||||
alignment: Alignment.centerLeft,
|
||||
child: (ButtonBuilder(imagePaths.icComposeWeb)
|
||||
..key(const Key('button_compose_email'))
|
||||
..decoration(BoxDecoration(
|
||||
borderRadius: BorderRadius.circular(10),
|
||||
color: AppColor.colorTextButton,
|
||||
boxShadow: const [
|
||||
BoxShadow(
|
||||
blurRadius: 12.0,
|
||||
color: AppColor.colorShadowComposerButton
|
||||
)
|
||||
]))
|
||||
..paddingIcon(EdgeInsets.only(
|
||||
right: AppUtils.isDirectionRTL(context) ? 0 : 8,
|
||||
left: AppUtils.isDirectionRTL(context) ? 8 : 0,
|
||||
))
|
||||
..iconColor(Colors.white)
|
||||
..size(24)
|
||||
..radiusSplash(10)
|
||||
..padding(const EdgeInsets.symmetric(vertical: 8))
|
||||
..textStyle(const TextStyle(
|
||||
fontSize: 15,
|
||||
color: Colors.white,
|
||||
fontWeight: FontWeight.w500
|
||||
))
|
||||
..onPressActionClick(() => controller.goToComposer(ComposerArguments()))
|
||||
..text(AppLocalizations.of(context).compose, isVertical: false)
|
||||
).build()
|
||||
child: TMailButtonWidget(
|
||||
key: const Key('compose_email_button'),
|
||||
text: AppLocalizations.of(context).compose,
|
||||
icon: imagePaths.icComposeWeb,
|
||||
borderRadius: 10,
|
||||
iconSize: 24,
|
||||
iconColor: Colors.white,
|
||||
padding: const EdgeInsetsDirectional.symmetric(vertical: 8),
|
||||
backgroundColor: AppColor.colorTextButton,
|
||||
boxShadow: const [
|
||||
BoxShadow(
|
||||
blurRadius: 12.0,
|
||||
color: AppColor.colorShadowComposerButton
|
||||
)
|
||||
],
|
||||
textStyle: const TextStyle(
|
||||
fontSize: 15,
|
||||
color: Colors.white,
|
||||
fontWeight: FontWeight.w500
|
||||
),
|
||||
onTapActionCallback: () => controller.goToComposer(ComposerArguments()),
|
||||
),
|
||||
);
|
||||
}
|
||||
}
|
||||
+28
-36
@@ -1,7 +1,7 @@
|
||||
import 'package:core/presentation/extensions/color_extension.dart';
|
||||
import 'package:core/presentation/resources/image_paths.dart';
|
||||
import 'package:core/presentation/utils/responsive_utils.dart';
|
||||
import 'package:core/presentation/views/button/button_builder.dart';
|
||||
import 'package:core/presentation/views/button/tmail_button_widget.dart';
|
||||
import 'package:flutter/material.dart';
|
||||
import 'package:tmail_ui_user/main/localizations/app_localizations.dart';
|
||||
|
||||
@@ -48,51 +48,43 @@ class EmailRulesHeaderWidget extends StatelessWidget {
|
||||
if (!responsiveUtils.isMobile(context)) {
|
||||
return Row(
|
||||
children: [
|
||||
(ButtonBuilder(imagePaths.icAddNewRules)
|
||||
..key(const Key('button_new_rule'))
|
||||
..decoration(BoxDecoration(
|
||||
borderRadius: BorderRadius.circular(10),
|
||||
color: AppColor.colorTextButton))
|
||||
..paddingIcon(const EdgeInsets.only(right: 8))
|
||||
..iconColor(Colors.white)
|
||||
..size(20)
|
||||
..radiusSplash(10)
|
||||
..addBoxConstraints(const BoxConstraints(minWidth: 130))
|
||||
..padding(const EdgeInsets.symmetric(vertical: 12,horizontal: 8))
|
||||
..textStyle(const TextStyle(
|
||||
TMailButtonWidget(
|
||||
key: const Key('new_rule_button'),
|
||||
text: AppLocalizations.of(context).addNewRule,
|
||||
icon: imagePaths.icAddNewRules,
|
||||
borderRadius: 10,
|
||||
backgroundColor: AppColor.colorTextButton,
|
||||
iconColor: Colors.white,
|
||||
minWidth: 130,
|
||||
padding: const EdgeInsets.symmetric(vertical: 12,horizontal: 8),
|
||||
iconSize: 20,
|
||||
textStyle: const TextStyle(
|
||||
fontSize: 17,
|
||||
color: Colors.white,
|
||||
fontWeight: FontWeight.w500,
|
||||
))
|
||||
..onPressActionClick(() => createRule.call())
|
||||
..text(
|
||||
AppLocalizations.of(context).addNewRule,
|
||||
isVertical: false,
|
||||
)).build(),
|
||||
),
|
||||
onTapActionCallback: createRule,
|
||||
),
|
||||
const Spacer(),
|
||||
],
|
||||
);
|
||||
} else {
|
||||
return (ButtonBuilder(imagePaths.icAddNewRules)
|
||||
..key(const Key('button_new_rule'))
|
||||
..decoration(BoxDecoration(
|
||||
borderRadius: BorderRadius.circular(10),
|
||||
color: AppColor.colorTextButton))
|
||||
..paddingIcon(const EdgeInsets.only(right: 8))
|
||||
..iconColor(Colors.white)
|
||||
..size(20)
|
||||
..radiusSplash(10)
|
||||
..padding(const EdgeInsets.symmetric(vertical: 12))
|
||||
..textStyle(const TextStyle(
|
||||
return TMailButtonWidget(
|
||||
key: const Key('new_rule_button'),
|
||||
text: AppLocalizations.of(context).addNewRule,
|
||||
icon: imagePaths.icAddNewRules,
|
||||
borderRadius: 10,
|
||||
backgroundColor: AppColor.colorTextButton,
|
||||
iconColor: Colors.white,
|
||||
padding: const EdgeInsets.symmetric(vertical: 12),
|
||||
iconSize: 20,
|
||||
textStyle: const TextStyle(
|
||||
fontSize: 17,
|
||||
color: Colors.white,
|
||||
fontWeight: FontWeight.w500,
|
||||
))
|
||||
..onPressActionClick(() => createRule.call())
|
||||
..text(
|
||||
AppLocalizations.of(context).addNewRule,
|
||||
isVertical: false,
|
||||
)).build();
|
||||
),
|
||||
onTapActionCallback: createRule,
|
||||
);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
@@ -7,7 +7,6 @@ import 'package:get/get.dart';
|
||||
import 'package:tmail_ui_user/features/manage_account/presentation/menu/manage_account_menu_controller.dart';
|
||||
import 'package:tmail_ui_user/features/manage_account/presentation/menu/widgets/account_menu_item_tile_builder.dart';
|
||||
import 'package:tmail_ui_user/main/localizations/app_localizations.dart';
|
||||
import 'package:tmail_ui_user/main/utils/app_utils.dart';
|
||||
|
||||
class ManageAccountMenuView extends GetWidget<ManageAccountMenuController> {
|
||||
|
||||
@@ -57,93 +56,100 @@ class ManageAccountMenuView extends GetWidget<ManageAccountMenuController> {
|
||||
const Divider(color: AppColor.colorDividerMailbox, height: 1),
|
||||
Expanded(child: Container(
|
||||
color: _responsiveUtils.isWebDesktop(context) ? AppColor.colorBgDesktop : Colors.white,
|
||||
child: Column(crossAxisAlignment: CrossAxisAlignment.start, children: [
|
||||
Padding(
|
||||
padding: const EdgeInsetsDirectional.only(start: 20, top: 24),
|
||||
child: (ButtonBuilder(DirectionUtils.isDirectionRTLByLanguage(context) ? _imagePaths.icArrowRight : _imagePaths.icBack)
|
||||
..key(const Key('button_back'))
|
||||
..decoration(BoxDecoration(borderRadius: BorderRadius.circular(10), color: AppColor.colorBgMailboxSelected))
|
||||
..paddingIcon(EdgeInsets.only(
|
||||
right: AppUtils.isDirectionRTL(context) ? 0 : 8,
|
||||
left: AppUtils.isDirectionRTL(context) ? 8 : 0,
|
||||
))
|
||||
..iconColor(AppColor.colorTextButton)
|
||||
..maxWidth(100)
|
||||
..size(DirectionUtils.isDirectionRTLByLanguage(context) ? null : 16)
|
||||
..radiusSplash(10)
|
||||
..padding(DirectionUtils.isDirectionRTLByLanguage(context)
|
||||
child: Column(
|
||||
crossAxisAlignment: CrossAxisAlignment.start,
|
||||
children: [
|
||||
Padding(
|
||||
padding: const EdgeInsetsDirectional.only(start: 20, top: 24),
|
||||
child: TMailButtonWidget(
|
||||
key: const Key('back_to_dashboard_button'),
|
||||
text: AppLocalizations.of(context).back,
|
||||
icon: DirectionUtils.isDirectionRTLByLanguage(context)
|
||||
? _imagePaths.icArrowRight
|
||||
: _imagePaths.icBack,
|
||||
borderRadius: 10,
|
||||
backgroundColor: AppColor.colorBgMailboxSelected,
|
||||
iconColor: AppColor.colorTextButton,
|
||||
maxWidth: 100,
|
||||
padding: DirectionUtils.isDirectionRTLByLanguage(context)
|
||||
? const EdgeInsets.symmetric(vertical: 5)
|
||||
: const EdgeInsets.symmetric(vertical: 10))
|
||||
..textStyle(const TextStyle(fontSize: 15, color: AppColor.colorTextButton, fontWeight: FontWeight.normal))
|
||||
..onPressActionClick(() => controller.backToMailboxDashBoard(context))
|
||||
..text(AppLocalizations.of(context).back, isVertical: false))
|
||||
.build()),
|
||||
Padding(
|
||||
padding: const EdgeInsetsDirectional.only(start: 32, top: 20),
|
||||
child: Text(
|
||||
AppLocalizations.of(context).manage_account,
|
||||
style: const TextStyle(
|
||||
color: Colors.black,
|
||||
fontWeight: FontWeight.bold,
|
||||
fontSize: 17
|
||||
)
|
||||
)
|
||||
),
|
||||
const SizedBox(height: 12),
|
||||
Obx(() {
|
||||
if (controller.listAccountMenuItem.isNotEmpty) {
|
||||
return ListView.builder(
|
||||
key: const Key('list_manage_account_menu_item'),
|
||||
padding: const EdgeInsetsDirectional.only(start: 16, end: 8),
|
||||
shrinkWrap: true,
|
||||
itemCount: controller.listAccountMenuItem.length,
|
||||
itemBuilder: (context, index) => Obx(() {
|
||||
final menuItem = controller.listAccountMenuItem[index];
|
||||
return AccountMenuItemTileBuilder(
|
||||
menuItem,
|
||||
controller.dashBoardController.accountMenuItemSelected.value,
|
||||
onSelectAccountMenuItemAction: controller.selectAccountMenuItem
|
||||
);
|
||||
})
|
||||
);
|
||||
} else {
|
||||
return const SizedBox.shrink();
|
||||
}
|
||||
}),
|
||||
const Padding(
|
||||
padding: EdgeInsets.symmetric(vertical: 16),
|
||||
child: Divider(color: AppColor.lineItemListColor, height: 1)),
|
||||
Padding(
|
||||
padding: const EdgeInsetsDirectional.only(start: 20, end: 10),
|
||||
child: Material(
|
||||
color: Colors.transparent,
|
||||
child: InkWell(
|
||||
onTap: () {
|
||||
controller.dashBoardController.logout(
|
||||
controller.dashBoardController.sessionCurrent,
|
||||
controller.dashBoardController.accountId.value
|
||||
);
|
||||
},
|
||||
borderRadius: BorderRadius.circular(10),
|
||||
child: Padding(
|
||||
padding: const EdgeInsets.symmetric(horizontal: 12, vertical: 6),
|
||||
child: Row(children: [
|
||||
SvgPicture.asset(_imagePaths.icSignOut, fit: BoxFit.fill),
|
||||
const SizedBox(width: 12),
|
||||
Expanded(child: Text(
|
||||
AppLocalizations.of(context).sign_out,
|
||||
style: const TextStyle(
|
||||
fontWeight: FontWeight.normal,
|
||||
fontSize: 15,
|
||||
color: Colors.black
|
||||
)
|
||||
))
|
||||
]),
|
||||
)
|
||||
: const EdgeInsets.symmetric(vertical: 10),
|
||||
iconSize: DirectionUtils.isDirectionRTLByLanguage(context) ? null : 16,
|
||||
textStyle: const TextStyle(
|
||||
fontSize: 15,
|
||||
color: AppColor.colorTextButton,
|
||||
fontWeight: FontWeight.normal
|
||||
),
|
||||
onTapActionCallback: () => controller.backToMailboxDashBoard(context),
|
||||
),
|
||||
)
|
||||
),
|
||||
]),
|
||||
),
|
||||
Padding(
|
||||
padding: const EdgeInsetsDirectional.only(start: 32, top: 20),
|
||||
child: Text(
|
||||
AppLocalizations.of(context).manage_account,
|
||||
style: const TextStyle(
|
||||
color: Colors.black,
|
||||
fontWeight: FontWeight.bold,
|
||||
fontSize: 17
|
||||
)
|
||||
)
|
||||
),
|
||||
const SizedBox(height: 12),
|
||||
Obx(() {
|
||||
if (controller.listAccountMenuItem.isNotEmpty) {
|
||||
return ListView.builder(
|
||||
key: const Key('list_manage_account_menu_item'),
|
||||
padding: const EdgeInsetsDirectional.only(start: 16, end: 8),
|
||||
shrinkWrap: true,
|
||||
itemCount: controller.listAccountMenuItem.length,
|
||||
itemBuilder: (context, index) => Obx(() {
|
||||
final menuItem = controller.listAccountMenuItem[index];
|
||||
return AccountMenuItemTileBuilder(
|
||||
menuItem,
|
||||
controller.dashBoardController.accountMenuItemSelected.value,
|
||||
onSelectAccountMenuItemAction: controller.selectAccountMenuItem
|
||||
);
|
||||
})
|
||||
);
|
||||
} else {
|
||||
return const SizedBox.shrink();
|
||||
}
|
||||
}),
|
||||
const Padding(
|
||||
padding: EdgeInsets.symmetric(vertical: 16),
|
||||
child: Divider(color: AppColor.lineItemListColor, height: 1)),
|
||||
Padding(
|
||||
padding: const EdgeInsetsDirectional.only(start: 20, end: 10),
|
||||
child: Material(
|
||||
color: Colors.transparent,
|
||||
child: InkWell(
|
||||
onTap: () {
|
||||
controller.dashBoardController.logout(
|
||||
controller.dashBoardController.sessionCurrent,
|
||||
controller.dashBoardController.accountId.value
|
||||
);
|
||||
},
|
||||
borderRadius: BorderRadius.circular(10),
|
||||
child: Padding(
|
||||
padding: const EdgeInsets.symmetric(horizontal: 12, vertical: 6),
|
||||
child: Row(children: [
|
||||
SvgPicture.asset(_imagePaths.icSignOut, fit: BoxFit.fill),
|
||||
const SizedBox(width: 12),
|
||||
Expanded(child: Text(
|
||||
AppLocalizations.of(context).sign_out,
|
||||
style: const TextStyle(
|
||||
fontWeight: FontWeight.normal,
|
||||
fontSize: 15,
|
||||
color: Colors.black
|
||||
)
|
||||
))
|
||||
]),
|
||||
)
|
||||
),
|
||||
)
|
||||
),
|
||||
]
|
||||
),
|
||||
)),
|
||||
]
|
||||
)
|
||||
|
||||
@@ -30,7 +30,7 @@ class QuotasView extends GetWidget<QuotasController> {
|
||||
? QuotasViewStyles.webBackgroundColor
|
||||
: QuotasViewStyles.mobileBackgroundColor,
|
||||
border: const Border(
|
||||
top: BorderSide( // <--- left side
|
||||
top: BorderSide(
|
||||
color: QuotasViewStyles.topLineColor,
|
||||
width: QuotasViewStyles.topLineSize,
|
||||
)
|
||||
|
||||
+59
-38
@@ -2,7 +2,7 @@
|
||||
import 'package:core/presentation/extensions/color_extension.dart';
|
||||
import 'package:core/presentation/resources/image_paths.dart';
|
||||
import 'package:core/presentation/utils/responsive_utils.dart';
|
||||
import 'package:core/presentation/views/button/button_builder.dart';
|
||||
import 'package:core/presentation/views/button/tmail_button_widget.dart';
|
||||
import 'package:flutter/material.dart';
|
||||
import 'package:get/get.dart';
|
||||
import 'package:tmail_ui_user/features/base/state/button_state.dart';
|
||||
@@ -33,49 +33,70 @@ class BottomBarSendingQueueWidget extends StatelessWidget {
|
||||
return Container(
|
||||
decoration: const BoxDecoration(
|
||||
border: Border(top: BorderSide(
|
||||
color: AppColor.lineItemListColor,
|
||||
width: 0.2,
|
||||
color: AppColor.colorDividerHorizontal,
|
||||
width: 0.5,
|
||||
)),
|
||||
color: Colors.white
|
||||
),
|
||||
child: Row(
|
||||
mainAxisAlignment: MainAxisAlignment.center,
|
||||
children: [
|
||||
Expanded(child: (ButtonBuilder(imagePaths.icEdit)
|
||||
..key(Key(SendingEmailActionType.edit.getButtonKey()))
|
||||
..iconColor(SendingEmailActionType.edit.getButtonIconColor(_isEditable ? ButtonState.enabled : ButtonState.disabled))
|
||||
..padding(const EdgeInsets.all(8))
|
||||
..radiusSplash(8)
|
||||
..textStyle(TextStyle(fontSize: 12, color: SendingEmailActionType.edit.getButtonTitleColor(_isEditable ? ButtonState.enabled : ButtonState.disabled)))
|
||||
..onPressActionClick(() {
|
||||
if (_isEditable) {
|
||||
onHandleSendingEmailActionType?.call(SendingEmailActionType.edit, listSendingEmailSelected);
|
||||
}
|
||||
})
|
||||
..text(SendingEmailActionType.edit.getButtonTitle(context), isVertical: responsiveUtils.isPortraitMobile(context))
|
||||
).build()),
|
||||
Expanded(child: (ButtonBuilder(imagePaths.icRefresh)
|
||||
..key(Key(SendingEmailActionType.resend.getButtonKey()))
|
||||
..iconColor(SendingEmailActionType.resend.getButtonIconColor(_isCanResend ? ButtonState.enabled : ButtonState.disabled))
|
||||
..padding(const EdgeInsets.all(8))
|
||||
..radiusSplash(8)
|
||||
..textStyle(TextStyle(fontSize: 12, color: SendingEmailActionType.resend.getButtonTitleColor(_isCanResend ? ButtonState.enabled : ButtonState.disabled)))
|
||||
..onPressActionClick(() {
|
||||
if (_isCanResend) {
|
||||
onHandleSendingEmailActionType?.call(SendingEmailActionType.resend, listSendingEmailSelected);
|
||||
}
|
||||
})
|
||||
..text(SendingEmailActionType.resend.getButtonTitle(context), isVertical: responsiveUtils.isPortraitMobile(context))
|
||||
).build()),
|
||||
Expanded(child: (ButtonBuilder(imagePaths.icDeleteComposer)
|
||||
..key(Key(SendingEmailActionType.delete.getButtonKey()))
|
||||
..iconColor(SendingEmailActionType.delete.getButtonIconColor(ButtonState.enabled))
|
||||
..padding(const EdgeInsets.all(8))
|
||||
..radiusSplash(8)
|
||||
..textStyle(TextStyle(fontSize: 12, color: SendingEmailActionType.delete.getButtonTitleColor(ButtonState.enabled)))
|
||||
..onPressActionClick(() => onHandleSendingEmailActionType?.call(SendingEmailActionType.delete, listSendingEmailSelected))
|
||||
..text(SendingEmailActionType.delete.getButtonTitle(context), isVertical: responsiveUtils.isPortraitMobile(context))
|
||||
).build())
|
||||
Expanded(
|
||||
child: TMailButtonWidget(
|
||||
key: Key(SendingEmailActionType.edit.getButtonKey()),
|
||||
text: SendingEmailActionType.edit.getButtonTitle(context),
|
||||
icon: imagePaths.icEdit,
|
||||
borderRadius: 8,
|
||||
iconColor: SendingEmailActionType.edit.getButtonIconColor(_isEditable ? ButtonState.enabled : ButtonState.disabled),
|
||||
textStyle: TextStyle(
|
||||
fontSize: 12,
|
||||
color: SendingEmailActionType.edit.getButtonTitleColor(_isEditable ? ButtonState.enabled : ButtonState.disabled)
|
||||
),
|
||||
verticalDirection: responsiveUtils.isPortraitMobile(context),
|
||||
onTapActionCallback: () {
|
||||
if (_isEditable) {
|
||||
onHandleSendingEmailActionType?.call(
|
||||
SendingEmailActionType.edit,
|
||||
listSendingEmailSelected
|
||||
);
|
||||
}
|
||||
},
|
||||
),
|
||||
),
|
||||
Expanded(
|
||||
child: TMailButtonWidget(
|
||||
key: Key(SendingEmailActionType.resend.getButtonKey()),
|
||||
text: SendingEmailActionType.resend.getButtonTitle(context),
|
||||
icon: imagePaths.icRefresh,
|
||||
borderRadius: 8,
|
||||
iconColor: SendingEmailActionType.resend.getButtonIconColor(_isCanResend ? ButtonState.enabled : ButtonState.disabled),
|
||||
textStyle: TextStyle(
|
||||
fontSize: 12,
|
||||
color: SendingEmailActionType.resend.getButtonTitleColor(_isCanResend ? ButtonState.enabled : ButtonState.disabled)
|
||||
),
|
||||
verticalDirection: responsiveUtils.isPortraitMobile(context),
|
||||
onTapActionCallback: () {
|
||||
if (_isCanResend) {
|
||||
onHandleSendingEmailActionType?.call(SendingEmailActionType.resend, listSendingEmailSelected);
|
||||
}
|
||||
},
|
||||
),
|
||||
),
|
||||
Expanded(
|
||||
child: TMailButtonWidget(
|
||||
key: Key(SendingEmailActionType.delete.getButtonKey()),
|
||||
text: SendingEmailActionType.delete.getButtonTitle(context),
|
||||
icon: imagePaths.icDeleteComposer,
|
||||
borderRadius: 8,
|
||||
iconColor: SendingEmailActionType.delete.getButtonIconColor(ButtonState.enabled),
|
||||
textStyle: TextStyle(
|
||||
fontSize: 12,
|
||||
color: SendingEmailActionType.delete.getButtonTitleColor(ButtonState.enabled)
|
||||
),
|
||||
verticalDirection: responsiveUtils.isPortraitMobile(context),
|
||||
onTapActionCallback: () => onHandleSendingEmailActionType?.call(SendingEmailActionType.delete, listSendingEmailSelected),
|
||||
),
|
||||
),
|
||||
],
|
||||
),
|
||||
);
|
||||
|
||||
@@ -222,9 +222,9 @@ class ThreadView extends GetWidget<ThreadController>
|
||||
return Obx(() {
|
||||
if (controller.isAllSearchInActive) {
|
||||
return Container(
|
||||
padding: PlatformInfo.isWeb
|
||||
? EdgeInsets.zero
|
||||
: controller.listEmailSelected.isNotEmpty ? const EdgeInsets.only(bottom: 70) : EdgeInsets.zero,
|
||||
padding: PlatformInfo.isMobile && controller.listEmailSelected.isNotEmpty
|
||||
? EdgeInsets.only(bottom: _responsiveUtils.isTabletLarge(context) ? 85 : 70)
|
||||
: EdgeInsets.zero,
|
||||
child: ComposeFloatingButton(
|
||||
scrollController: controller.listEmailController,
|
||||
onTap: () => controller.mailboxDashBoardController.goToComposer(ComposerArguments())
|
||||
|
||||
+126
-127
@@ -1,8 +1,7 @@
|
||||
import 'package:core/presentation/extensions/color_extension.dart';
|
||||
import 'package:core/presentation/resources/image_paths.dart';
|
||||
import 'package:core/presentation/utils/responsive_utils.dart';
|
||||
import 'package:core/presentation/views/button/button_builder.dart';
|
||||
import 'package:core/utils/platform_info.dart';
|
||||
import 'package:core/presentation/views/button/tmail_button_widget.dart';
|
||||
import 'package:flutter/material.dart';
|
||||
import 'package:model/email/email_action_type.dart';
|
||||
import 'package:model/email/presentation_email.dart';
|
||||
@@ -35,86 +34,131 @@ class BottomBarThreadSelectionWidget extends StatelessWidget{
|
||||
@override
|
||||
Widget build(BuildContext context) {
|
||||
return Container(
|
||||
key: const Key('bottom_bar_thread_selection_widget'),
|
||||
decoration: const BoxDecoration(
|
||||
border: Border(top: BorderSide(
|
||||
color: AppColor.lineItemListColor,
|
||||
width: 0.2,
|
||||
color: AppColor.colorDividerHorizontal,
|
||||
width: 0.5,
|
||||
)),
|
||||
color: Colors.white
|
||||
),
|
||||
child: Row(
|
||||
mainAxisAlignment: MainAxisAlignment.center,
|
||||
children: [
|
||||
if(_currentMailbox?.isDrafts == false)
|
||||
Expanded(child: (ButtonBuilder(_listSelectionEmail.isAllEmailRead ? _imagePaths.icUnread : _imagePaths.icRead)
|
||||
..key(const Key('button_mark_read_email'))
|
||||
..padding(const EdgeInsets.all(8))
|
||||
..radiusSplash(8)
|
||||
..textStyle(const TextStyle(fontSize: 12, color: AppColor.colorTextButton))
|
||||
..onPressActionClick(() {
|
||||
onPressEmailSelectionActionClick?.call(
|
||||
_listSelectionEmail.isAllEmailRead ? EmailActionType.markAsUnread : EmailActionType.markAsRead,
|
||||
_listSelectionEmail
|
||||
);
|
||||
})
|
||||
..text(_getTextButtonMarkAsRead(context), isVertical: _responsiveUtils.isMobile(context)))
|
||||
.build()),
|
||||
Expanded(child: (ButtonBuilder(_listSelectionEmail.isAllEmailStarred ? _imagePaths.icUnStar : _imagePaths.icStar)
|
||||
..key(const Key('button_mark_as_star_email'))
|
||||
..padding(const EdgeInsets.all(8))
|
||||
..radiusSplash(8)
|
||||
..textStyle(const TextStyle(fontSize: 12, color: AppColor.colorTextButton))
|
||||
..onPressActionClick(() {
|
||||
onPressEmailSelectionActionClick?.call(
|
||||
_listSelectionEmail.isAllEmailStarred ? EmailActionType.unMarkAsStarred : EmailActionType.markAsStarred,
|
||||
_listSelectionEmail
|
||||
);
|
||||
})
|
||||
..text(_getTextButtonMarkAsStar(context), isVertical: _responsiveUtils.isMobile(context)))
|
||||
.build()),
|
||||
if (_currentMailbox?.isDrafts == false)
|
||||
Expanded(child: (ButtonBuilder(_imagePaths.icMove)
|
||||
..key(const Key('button_move_to_mailbox'))
|
||||
..padding(const EdgeInsets.all(8))
|
||||
..radiusSplash(8)
|
||||
..textStyle(const TextStyle(fontSize: 12, color: AppColor.colorTextButton))
|
||||
..onPressActionClick(() {
|
||||
onPressEmailSelectionActionClick?.call(EmailActionType.moveToMailbox, _listSelectionEmail);
|
||||
})
|
||||
..text(_getTextButtonMove(context), isVertical: _responsiveUtils.isMobile(context)))
|
||||
.build()),
|
||||
if (_currentMailbox?.isDrafts == false)
|
||||
Expanded(child: (ButtonBuilder(_currentMailbox?.isSpam == true ? _imagePaths.icNotSpam : _imagePaths.icSpam)
|
||||
..key(const Key('button_move_to_spam'))
|
||||
..padding(const EdgeInsets.all(8))
|
||||
..radiusSplash(8)
|
||||
..textStyle(const TextStyle(fontSize: 12, color: AppColor.colorTextButton))
|
||||
..onPressActionClick(() {
|
||||
if (_currentMailbox?.isSpam == true) {
|
||||
onPressEmailSelectionActionClick?.call(EmailActionType.unSpam, _listSelectionEmail);
|
||||
} else {
|
||||
onPressEmailSelectionActionClick?.call(EmailActionType.moveToSpam, _listSelectionEmail);
|
||||
}
|
||||
})
|
||||
..text(_getTextButtonSpam(context), isVertical: _responsiveUtils.isMobile(context)))
|
||||
.build()),
|
||||
Expanded(child: (ButtonBuilder(canDeletePermanently ? _imagePaths.icDeleteComposer : _imagePaths.icDelete)
|
||||
..key(const Key('button_delete_email'))
|
||||
..iconColor(canDeletePermanently ? AppColor.colorDeletePermanentlyButton : AppColor.primaryColor)
|
||||
..padding(const EdgeInsets.all(8))
|
||||
..radiusSplash(8)
|
||||
..textStyle(const TextStyle(fontSize: 12, color: AppColor.colorTextButton))
|
||||
..onPressActionClick(() {
|
||||
if (canDeletePermanently) {
|
||||
onPressEmailSelectionActionClick?.call(EmailActionType.deletePermanently, _listSelectionEmail);
|
||||
} else {
|
||||
onPressEmailSelectionActionClick?.call(EmailActionType.moveToTrash, _listSelectionEmail);
|
||||
}
|
||||
})
|
||||
..text(_getTextButtonDelete(context), isVertical: _responsiveUtils.isMobile(context)))
|
||||
.build())
|
||||
]
|
||||
child: IntrinsicHeight(
|
||||
child: Row(
|
||||
children: [
|
||||
if (_currentMailbox?.isDrafts == false)
|
||||
Expanded(
|
||||
child: TMailButtonWidget(
|
||||
key: const Key('mark_as_read_selected_email_button'),
|
||||
text: _listSelectionEmail.isAllEmailRead
|
||||
? AppLocalizations.of(context).unread
|
||||
: AppLocalizations.of(context).read,
|
||||
icon: _listSelectionEmail.isAllEmailRead ? _imagePaths.icUnread : _imagePaths.icRead,
|
||||
borderRadius: 0,
|
||||
iconSize: 20,
|
||||
flexibleText: true,
|
||||
textAlign: TextAlign.center,
|
||||
padding: const EdgeInsets.symmetric(horizontal: 8, vertical: 12),
|
||||
backgroundColor: Colors.transparent,
|
||||
textStyle: const TextStyle(fontSize: 12, color: AppColor.colorTextButton),
|
||||
verticalDirection: _verticalDirection(context),
|
||||
onTapActionCallback: () {
|
||||
onPressEmailSelectionActionClick?.call(
|
||||
_listSelectionEmail.isAllEmailRead ? EmailActionType.markAsUnread : EmailActionType.markAsRead,
|
||||
_listSelectionEmail
|
||||
);
|
||||
},
|
||||
),
|
||||
),
|
||||
Expanded(
|
||||
child: TMailButtonWidget(
|
||||
key: const Key('mark_as_star_selected_email_button'),
|
||||
text: _listSelectionEmail.isAllEmailStarred
|
||||
? AppLocalizations.of(context).un_star
|
||||
: AppLocalizations.of(context).star,
|
||||
icon: _listSelectionEmail.isAllEmailStarred ? _imagePaths.icUnStar : _imagePaths.icStar,
|
||||
borderRadius: 0,
|
||||
iconSize: 20,
|
||||
flexibleText: true,
|
||||
textAlign: TextAlign.center,
|
||||
padding: const EdgeInsets.symmetric(horizontal: 8, vertical: 12),
|
||||
backgroundColor: Colors.transparent,
|
||||
textStyle: const TextStyle(fontSize: 12, color: AppColor.colorTextButton),
|
||||
verticalDirection: _verticalDirection(context),
|
||||
onTapActionCallback: () {
|
||||
onPressEmailSelectionActionClick?.call(
|
||||
_listSelectionEmail.isAllEmailStarred ? EmailActionType.unMarkAsStarred : EmailActionType.markAsStarred,
|
||||
_listSelectionEmail
|
||||
);
|
||||
},
|
||||
),
|
||||
),
|
||||
if (_currentMailbox?.isDrafts == false)
|
||||
Expanded(
|
||||
child: TMailButtonWidget(
|
||||
key: const Key('move_selected_email_to_mailbox_button'),
|
||||
text: AppLocalizations.of(context).move,
|
||||
icon: _imagePaths.icMove,
|
||||
borderRadius: 0,
|
||||
iconSize: 20,
|
||||
textAlign: TextAlign.center,
|
||||
flexibleText: true,
|
||||
padding: const EdgeInsets.symmetric(horizontal: 8, vertical: 12),
|
||||
backgroundColor: Colors.transparent,
|
||||
textStyle: const TextStyle(fontSize: 12, color: AppColor.colorTextButton),
|
||||
verticalDirection: _verticalDirection(context),
|
||||
onTapActionCallback: () {
|
||||
onPressEmailSelectionActionClick?.call(EmailActionType.moveToMailbox, _listSelectionEmail);
|
||||
},
|
||||
),
|
||||
),
|
||||
if (_currentMailbox?.isDrafts == false)
|
||||
Expanded(
|
||||
child: TMailButtonWidget(
|
||||
key: const Key('move_selected_email_to_spam_button'),
|
||||
text: _currentMailbox?.isSpam == true
|
||||
? AppLocalizations.of(context).un_spam
|
||||
: AppLocalizations.of(context).spam,
|
||||
icon: _currentMailbox?.isSpam == true ? _imagePaths.icNotSpam : _imagePaths.icSpam,
|
||||
borderRadius: 0,
|
||||
iconSize: 20,
|
||||
flexibleText: true,
|
||||
textAlign: TextAlign.center,
|
||||
padding: const EdgeInsets.symmetric(horizontal: 8, vertical: 12),
|
||||
backgroundColor: Colors.transparent,
|
||||
textStyle: const TextStyle(fontSize: 12, color: AppColor.colorTextButton),
|
||||
verticalDirection: _verticalDirection(context),
|
||||
onTapActionCallback: () {
|
||||
if (_currentMailbox?.isSpam == true) {
|
||||
onPressEmailSelectionActionClick?.call(EmailActionType.unSpam, _listSelectionEmail);
|
||||
} else {
|
||||
onPressEmailSelectionActionClick?.call(EmailActionType.moveToSpam, _listSelectionEmail);
|
||||
}
|
||||
},
|
||||
),
|
||||
),
|
||||
Expanded(
|
||||
child: TMailButtonWidget(
|
||||
key: const Key('delete_selected_email_button'),
|
||||
text: AppLocalizations.of(context).delete,
|
||||
icon: canDeletePermanently ? _imagePaths.icDeleteComposer : _imagePaths.icDelete,
|
||||
iconColor: canDeletePermanently ? AppColor.colorDeletePermanentlyButton : AppColor.primaryColor,
|
||||
borderRadius: 0,
|
||||
iconSize: 20,
|
||||
flexibleText: true,
|
||||
textAlign: TextAlign.center,
|
||||
padding: const EdgeInsets.symmetric(horizontal: 8, vertical: 12),
|
||||
backgroundColor: Colors.transparent,
|
||||
textStyle: const TextStyle(fontSize: 12, color: AppColor.colorTextButton),
|
||||
verticalDirection: _verticalDirection(context),
|
||||
onTapActionCallback: () {
|
||||
if (canDeletePermanently) {
|
||||
onPressEmailSelectionActionClick?.call(EmailActionType.deletePermanently, _listSelectionEmail);
|
||||
} else {
|
||||
onPressEmailSelectionActionClick?.call(EmailActionType.moveToTrash, _listSelectionEmail);
|
||||
}
|
||||
},
|
||||
),
|
||||
),
|
||||
]
|
||||
),
|
||||
)
|
||||
);
|
||||
}
|
||||
@@ -123,54 +167,9 @@ class BottomBarThreadSelectionWidget extends StatelessWidget{
|
||||
return _currentMailbox?.isTrash == true || _currentMailbox?.isDrafts == true;
|
||||
}
|
||||
|
||||
String? _getTextButtonMarkAsRead(BuildContext context) {
|
||||
if (!_isMailboxDashboardSplitView(context)) {
|
||||
return _listSelectionEmail.isAllEmailRead
|
||||
? AppLocalizations.of(context).unread
|
||||
: AppLocalizations.of(context).read;
|
||||
}
|
||||
return null;
|
||||
}
|
||||
|
||||
String? _getTextButtonMarkAsStar(BuildContext context) {
|
||||
if (!_isMailboxDashboardSplitView(context)) {
|
||||
return _listSelectionEmail.isAllEmailStarred
|
||||
? AppLocalizations.of(context).un_star
|
||||
: AppLocalizations.of(context).star;
|
||||
}
|
||||
return null;
|
||||
}
|
||||
|
||||
String? _getTextButtonMove(BuildContext context) {
|
||||
if (!_isMailboxDashboardSplitView(context)) {
|
||||
return AppLocalizations.of(context).move;
|
||||
}
|
||||
return null;
|
||||
}
|
||||
|
||||
String? _getTextButtonSpam(BuildContext context) {
|
||||
if (!_isMailboxDashboardSplitView(context)) {
|
||||
return _currentMailbox?.isSpam == true
|
||||
? AppLocalizations.of(context).un_spam
|
||||
: AppLocalizations.of(context).spam;
|
||||
}
|
||||
return null;
|
||||
}
|
||||
|
||||
String? _getTextButtonDelete(BuildContext context) {
|
||||
if (!_isMailboxDashboardSplitView(context)) {
|
||||
return AppLocalizations.of(context).delete;
|
||||
}
|
||||
return null;
|
||||
}
|
||||
|
||||
bool _isMailboxDashboardSplitView(BuildContext context) {
|
||||
if (PlatformInfo.isWeb) {
|
||||
return _responsiveUtils.isTabletLarge(context);
|
||||
} else {
|
||||
return _responsiveUtils.isLandscapeTablet(context) ||
|
||||
_responsiveUtils.isTabletLarge(context) ||
|
||||
_responsiveUtils.isDesktop(context);
|
||||
}
|
||||
bool _verticalDirection(BuildContext context) {
|
||||
return _responsiveUtils.isLandscapeMobile(context) ||
|
||||
_responsiveUtils.isPortraitMobile(context) ||
|
||||
_responsiveUtils.isTabletLarge(context);
|
||||
}
|
||||
}
|
||||
Reference in New Issue
Block a user