From 6bf67c7bb4f60acdff7eb0f193a4785b1cfa5194 Mon Sep 17 00:00:00 2001 From: dab246 Date: Fri, 29 Sep 2023 11:40:49 +0700 Subject: [PATCH] TF-2179 Add DefaultWebAppBarThread widget/style (cherry picked from commit 5d1a43611889559bd9b9b8e32b07009dc3a22b0d) --- ...fault_web_app_bar_thread_widget_style.dart | 28 +++++++ .../default_web_app_bar_thread_widget.dart | 78 +++++++++++++++++++ 2 files changed, 106 insertions(+) create mode 100644 lib/features/thread/presentation/styles/app_bar/default_web_app_bar_thread_widget_style.dart create mode 100644 lib/features/thread/presentation/widgets/app_bar/default_web_app_bar_thread_widget.dart diff --git a/lib/features/thread/presentation/styles/app_bar/default_web_app_bar_thread_widget_style.dart b/lib/features/thread/presentation/styles/app_bar/default_web_app_bar_thread_widget_style.dart new file mode 100644 index 000000000..4d7cf4b1d --- /dev/null +++ b/lib/features/thread/presentation/styles/app_bar/default_web_app_bar_thread_widget_style.dart @@ -0,0 +1,28 @@ + +import 'package:core/presentation/extensions/color_extension.dart'; +import 'package:flutter/material.dart'; +import 'package:tmail_ui_user/features/thread/domain/model/filter_message_option.dart'; + +class DefaultWebAppBarThreadWidgetStyle { + static const double buttonMaxWidth = 80; + static const double titleOffset = 180; + static const double minHeight = 56; + + static const Color backgroundColor = Colors.white; + + static const EdgeInsetsGeometry padding = EdgeInsets.symmetric(vertical: 8, horizontal: 16); + static const EdgeInsetsGeometry mailboxMenuPadding = EdgeInsets.all(5); + static const EdgeInsetsGeometry titlePadding = EdgeInsets.symmetric(horizontal: 16); + + static const TextStyle titleTextStyle = TextStyle( + fontSize: 21, + color: Colors.black, + fontWeight: FontWeight.bold + ); + + static Color getFilterButtonColor(FilterMessageOption option) { + return option == FilterMessageOption.all + ? AppColor.colorFilterMessageDisabled + : AppColor.colorFilterMessageEnabled; + } +} \ No newline at end of file diff --git a/lib/features/thread/presentation/widgets/app_bar/default_web_app_bar_thread_widget.dart b/lib/features/thread/presentation/widgets/app_bar/default_web_app_bar_thread_widget.dart new file mode 100644 index 000000000..900c5ed40 --- /dev/null +++ b/lib/features/thread/presentation/widgets/app_bar/default_web_app_bar_thread_widget.dart @@ -0,0 +1,78 @@ + +import 'package:core/presentation/resources/image_paths.dart'; +import 'package:core/presentation/utils/style_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/mailbox/presentation_mailbox.dart'; +import 'package:tmail_ui_user/features/mailbox/presentation/extensions/presentation_mailbox_extension.dart'; +import 'package:tmail_ui_user/features/thread/domain/model/filter_message_option.dart'; +import 'package:tmail_ui_user/features/thread/presentation/styles/app_bar/default_web_app_bar_thread_widget_style.dart'; +import 'package:tmail_ui_user/features/thread/presentation/widgets/app_bar/app_bar_thread_widget.dart'; +import 'package:tmail_ui_user/main/localizations/app_localizations.dart'; + +class DefaultWebAppBarThreadWidget extends StatelessWidget { + final _imagePaths = Get.find(); + + final PresentationMailbox? mailboxSelected; + final FilterMessageOption filterOption; + final OnOpenMailboxMenuActionClick openMailboxAction; + final OnPopupMenuFilterEmailAction? onPopupMenuFilterEmailAction; + final OnContextMenuFilterEmailAction? onContextMenuFilterEmailAction; + + DefaultWebAppBarThreadWidget({ + super.key, + required this.mailboxSelected, + required this.filterOption, + required this.openMailboxAction, + this.onPopupMenuFilterEmailAction, + this.onContextMenuFilterEmailAction, + }); + + @override + Widget build(BuildContext context) { + return LayoutBuilder(builder: (context, constraints) { + return Container( + color: DefaultWebAppBarThreadWidgetStyle.backgroundColor, + padding: DefaultWebAppBarThreadWidgetStyle.padding, + constraints: const BoxConstraints(minHeight: DefaultWebAppBarThreadWidgetStyle.minHeight), + child: Row( + children: [ + TMailButtonWidget.fromIcon( + key: const Key('mailbox_menu_button'), + icon: _imagePaths.icMenuDrawer, + backgroundColor: Colors.transparent, + padding: DefaultWebAppBarThreadWidgetStyle.mailboxMenuPadding, + maxWidth: DefaultWebAppBarThreadWidgetStyle.buttonMaxWidth, + tooltipMessage: AppLocalizations.of(context).openMailboxMenu, + onTapActionCallback: openMailboxAction, + ), + Expanded( + child: Padding( + padding: DefaultWebAppBarThreadWidgetStyle.titlePadding, + child: Text( + mailboxSelected?.getDisplayName(context) ?? '', + maxLines: 1, + textAlign: TextAlign.center, + overflow: CommonTextStyle.defaultTextOverFlow, + softWrap: CommonTextStyle.defaultSoftWrap, + style: DefaultWebAppBarThreadWidgetStyle.titleTextStyle + ), + ), + ), + TMailButtonWidget.fromIcon( + key: const Key('filter_message_button'), + icon: _imagePaths.icFilter, + iconColor: DefaultWebAppBarThreadWidgetStyle.getFilterButtonColor(filterOption), + backgroundColor: Colors.transparent, + maxWidth: DefaultWebAppBarThreadWidgetStyle.buttonMaxWidth, + tooltipMessage: AppLocalizations.of(context).filter_messages, + onTapActionCallback: () => onContextMenuFilterEmailAction?.call(filterOption), + onTapActionAtPositionCallback: (position) => onPopupMenuFilterEmailAction?.call(filterOption, position), + ), + ] + ), + ); + }); + } +}