Apply new design for spam alert on desktop

Signed-off-by: dab246 <tdvu@linagora.com>
This commit is contained in:
dab246
2025-07-08 11:02:53 +07:00
committed by Dat H. Pham
parent da71890120
commit 290372cb75
9 changed files with 216 additions and 307 deletions
@@ -1,93 +0,0 @@
import 'package:core/presentation/extensions/color_extension.dart';
import 'package:core/presentation/utils/style_utils.dart';
import 'package:core/presentation/utils/theme_utils.dart';
import 'package:flutter/material.dart';
import 'package:flutter_svg/flutter_svg.dart';
import 'package:tmail_ui_user/features/thread/presentation/styles/spam_banner/spam_report_banner_button_styles.dart';
class SpamReportBannerButtonWidget extends StatelessWidget {
final String label;
final Color labelColor;
final VoidCallback onTap;
final String? icon;
final bool iconLeftAlignment;
final bool wrapContent;
const SpamReportBannerButtonWidget({
super.key,
required this.label,
required this.labelColor,
required this.onTap,
this.icon,
this.iconLeftAlignment = true,
this.wrapContent = false,
});
@override
Widget build(BuildContext context) {
return Material(
color: Colors.transparent,
child: InkWell(
onTap: onTap,
borderRadius: const BorderRadius.all(Radius.circular(SpamReportBannerButtonStyles.borderRadius)),
child: Container(
width: wrapContent ? null : double.infinity,
padding: const EdgeInsetsDirectional.all(SpamReportBannerButtonStyles.padding),
decoration: const BoxDecoration(
borderRadius: BorderRadius.all(Radius.circular(SpamReportBannerButtonStyles.borderRadius)),
color: SpamReportBannerButtonStyles.backgroundColor
),
child: icon == null
? Text(
label,
textAlign: TextAlign.center,
style: ThemeUtils.defaultTextStyleInterFont.copyWith(
fontSize: SpamReportBannerButtonStyles.labelTextSize,
color: labelColor,
fontWeight: FontWeight.w400
)
)
: Row(
mainAxisSize: MainAxisSize.min,
mainAxisAlignment: MainAxisAlignment.center,
children: [
if (iconLeftAlignment)
Padding(
padding: const EdgeInsetsDirectional.only(end: SpamReportBannerButtonStyles.paddingIcon),
child: SvgPicture.asset(
icon!,
width: SpamReportBannerButtonStyles.iconSize,
height: SpamReportBannerButtonStyles.iconSize,
colorFilter: labelColor.asFilter(),
),
),
Text(
label,
textAlign: TextAlign.center,
overflow: CommonTextStyle.defaultTextOverFlow,
softWrap: CommonTextStyle.defaultSoftWrap,
style: ThemeUtils.defaultTextStyleInterFont.copyWith(
fontSize: SpamReportBannerButtonStyles.labelTextSize,
color: labelColor,
fontWeight: FontWeight.w400
)
),
if (!iconLeftAlignment)
Padding(
padding: const EdgeInsetsDirectional.only(start: SpamReportBannerButtonStyles.paddingIcon),
child: SvgPicture.asset(
icon!,
width: SpamReportBannerButtonStyles.iconSize,
height: SpamReportBannerButtonStyles.iconSize,
colorFilter: labelColor.asFilter(),
),
),
],
),
),
),
);
}
}
@@ -1,60 +0,0 @@
import 'package:core/presentation/resources/image_paths.dart';
import 'package:core/presentation/utils/responsive_utils.dart';
import 'package:core/presentation/utils/theme_utils.dart';
import 'package:flutter/cupertino.dart';
import 'package:flutter_svg/flutter_svg.dart';
import 'package:get/get.dart';
import 'package:tmail_ui_user/features/thread/presentation/styles/spam_banner/spam_report_banner_label_styles.dart';
import 'package:tmail_ui_user/main/localizations/app_localizations.dart';
class SpamReportBannerLabelWidget extends StatelessWidget {
final String countSpamEmailsAsString;
final Color labelColor;
const SpamReportBannerLabelWidget({
super.key,
required this.countSpamEmailsAsString,
this.labelColor = SpamReportBannerLabelStyles.labelTextColor
});
@override
Widget build(BuildContext context) {
final responsiveUtils = Get.find<ResponsiveUtils>();
final imagePaths = Get.find<ImagePaths>();
return Row(
mainAxisAlignment: MainAxisAlignment.center,
children: [
SvgPicture.asset(
imagePaths.icInfoCircleOutline,
width: SpamReportBannerLabelStyles.iconSize,
height: SpamReportBannerLabelStyles.iconSize
),
const SizedBox(width: SpamReportBannerLabelStyles.space),
if (responsiveUtils.isWebDesktop(context))
Text(
AppLocalizations.of(context).countNewSpamEmails(countSpamEmailsAsString),
textAlign: TextAlign.center,
style: ThemeUtils.defaultTextStyleInterFont.copyWith(
fontSize: SpamReportBannerLabelStyles.labelTextSize,
color: labelColor,
fontWeight: FontWeight.w500
),
)
else
Flexible(
child: Text(
AppLocalizations.of(context).countNewSpamEmails(countSpamEmailsAsString),
textAlign: TextAlign.center,
style: ThemeUtils.defaultTextStyleInterFont.copyWith(
fontSize: SpamReportBannerLabelStyles.labelTextSize,
color: labelColor,
fontWeight: FontWeight.w500
),
),
)
],
);
}
}
@@ -1,79 +0,0 @@
import 'package:core/presentation/resources/image_paths.dart';
import 'package:core/utils/direction_utils.dart';
import 'package:flutter/material.dart';
import 'package:get/get.dart';
import 'package:tmail_ui_user/features/mailbox_dashboard/domain/model/spam_report_state.dart';
import 'package:tmail_ui_user/features/mailbox_dashboard/presentation/controller/spam_report_controller.dart';
import 'package:tmail_ui_user/features/thread/presentation/styles/spam_banner/spam_report_banner_button_styles.dart';
import 'package:tmail_ui_user/features/thread/presentation/styles/spam_banner/spam_report_banner_label_styles.dart';
import 'package:tmail_ui_user/features/thread/presentation/styles/spam_banner/spam_report_banner_web_styles.dart';
import 'package:tmail_ui_user/features/thread/presentation/widgets/spam_banner/spam_report_banner_button_widget.dart';
import 'package:tmail_ui_user/features/thread/presentation/widgets/spam_banner/spam_report_banner_label_widget.dart';
import 'package:tmail_ui_user/main/localizations/app_localizations.dart';
class SpamReportBannerWebWidget extends StatelessWidget {
const SpamReportBannerWebWidget({ Key? key }) : super(key: key);
@override
Widget build(BuildContext context){
final spamReportController = Get.find<SpamReportController>();
final imagePaths = Get.find<ImagePaths>();
return Obx(() {
if (spamReportController.spamReportState.value == SpamReportState.disabled
|| spamReportController.presentationSpamMailbox.value == null) {
return const SizedBox.shrink();
}
return Container(
margin: SpamReportBannerWebStyles.bannerMargin,
width: double.infinity,
padding: SpamReportBannerWebStyles.bannerPadding,
decoration: ShapeDecoration(
color: SpamReportBannerWebStyles.backgroundColor,
shape: const RoundedRectangleBorder(
side: BorderSide(
width: 1,
color: SpamReportBannerWebStyles.strokeBorderColor,
),
borderRadius: BorderRadius.all(Radius.circular(SpamReportBannerWebStyles.borderRadius)),
),
),
child: Stack(
alignment: AlignmentDirectional.center,
children: [
Row(
mainAxisAlignment: MainAxisAlignment.center,
mainAxisSize: MainAxisSize.min,
children: [
SpamReportBannerLabelWidget(
countSpamEmailsAsString: spamReportController.numberOfUnreadSpamEmails,
labelColor: SpamReportBannerLabelStyles.highlightLabelTextColor
),
const SizedBox(width: 32),
SpamReportBannerButtonWidget(
label: AppLocalizations.of(context).showDetails,
labelColor: SpamReportBannerButtonStyles.positiveButtonTextColor,
onTap: spamReportController.openMailbox,
icon: DirectionUtils.isDirectionRTLByLanguage(context)
? imagePaths.icArrowLeft
: imagePaths.icArrowRight,
iconLeftAlignment: false,
wrapContent: true,
),
],
),
PositionedDirectional(
end: 0,
child: SpamReportBannerButtonWidget(
label: AppLocalizations.of(context).dismiss,
labelColor: SpamReportBannerButtonStyles.negativeButtonTextColor,
onTap: () => spamReportController.dismissSpamReportAction(context),
icon: imagePaths.icClose,
wrapContent: true,
),
)
],
),
);
});
}
}
@@ -1,70 +0,0 @@
import 'package:flutter/material.dart';
import 'package:get/get.dart';
import 'package:tmail_ui_user/features/mailbox_dashboard/domain/model/spam_report_state.dart';
import 'package:tmail_ui_user/features/mailbox_dashboard/presentation/controller/spam_report_controller.dart';
import 'package:tmail_ui_user/features/thread/presentation/styles/spam_banner/spam_report_banner_button_styles.dart';
import 'package:tmail_ui_user/features/thread/presentation/styles/spam_banner/spam_report_banner_styles.dart';
import 'package:tmail_ui_user/features/thread/presentation/widgets/spam_banner/spam_report_banner_button_widget.dart';
import 'package:tmail_ui_user/features/thread/presentation/widgets/spam_banner/spam_report_banner_label_widget.dart';
import 'package:tmail_ui_user/main/localizations/app_localizations.dart';
class SpamReportBannerWidget extends StatelessWidget {
final EdgeInsetsGeometry? margin;
final SpamReportController spamReportController;
const SpamReportBannerWidget({
Key? key,
required this.spamReportController,
this.margin
}) : super(key: key);
@override
Widget build(BuildContext context){
return Obx(() {
if (spamReportController.spamReportState.value == SpamReportState.disabled
|| spamReportController.presentationSpamMailbox.value == null) {
return const SizedBox.shrink();
}
return Container(
margin: margin,
padding: const EdgeInsetsDirectional.all(SpamReportBannerStyles.padding),
decoration: ShapeDecoration(
color: SpamReportBannerStyles.backgroundColor,
shape: const RoundedRectangleBorder(
side: BorderSide(
width: 1,
color: SpamReportBannerStyles.strokeBorderColor,
),
borderRadius: BorderRadius.all(Radius.circular(SpamReportBannerStyles.borderRadius)),
),
),
child: Column(
mainAxisSize: MainAxisSize.min,
children: [
SpamReportBannerLabelWidget(countSpamEmailsAsString: spamReportController.numberOfUnreadSpamEmails),
const SizedBox(height: SpamReportBannerStyles.space),
Row(
children: [
Expanded(
child: SpamReportBannerButtonWidget(
label: AppLocalizations.of(context).showDetails,
labelColor: SpamReportBannerButtonStyles.positiveButtonTextColor,
onTap: spamReportController.openMailbox
),
),
const SizedBox(width: SpamReportBannerStyles.space),
Expanded(
child: SpamReportBannerButtonWidget(
label: AppLocalizations.of(context).dismiss,
labelColor: SpamReportBannerButtonStyles.negativeButtonTextColor,
onTap: () => spamReportController.dismissSpamReportAction(context)
),
),
],
),
],
),
);
});
}
}