TF-3479 Remove ComposerUtils & only sync composer state when composers is not empty

Signed-off-by: dab246 <tdvu@linagora.com>
This commit is contained in:
dab246
2025-02-19 09:56:56 +07:00
committed by Dat H. Pham
parent 562cb39f19
commit 3126701b84
10 changed files with 48 additions and 60 deletions
@@ -1,7 +1,7 @@
import 'package:tmail_ui_user/features/composer/presentation/composer_controller.dart'; import 'package:tmail_ui_user/features/composer/presentation/composer_controller.dart';
import 'package:tmail_ui_user/features/composer/presentation/model/screen_display_mode.dart'; import 'package:tmail_ui_user/features/composer/presentation/model/screen_display_mode.dart';
import 'package:tmail_ui_user/features/composer/presentation/utils/composer_utils.dart'; import 'package:tmail_ui_user/features/composer/presentation/styles/composer_style.dart';
import 'package:tmail_ui_user/main/routes/route_navigation.dart'; import 'package:tmail_ui_user/main/routes/route_navigation.dart';
extension UpdateScreenDisplayModeExtension on ComposerController { extension UpdateScreenDisplayModeExtension on ComposerController {
@@ -21,9 +21,9 @@ extension UpdateScreenDisplayModeExtension on ComposerController {
double get composerWidth { double get composerWidth {
switch (screenDisplayMode.value) { switch (screenDisplayMode.value) {
case ScreenDisplayMode.normal: case ScreenDisplayMode.normal:
return ComposerUtils.normalWidth; return ComposerStyle.normalWidth;
case ScreenDisplayMode.minimize: case ScreenDisplayMode.minimize:
return ComposerUtils.minimizeWidth; return ComposerStyle.minimizeWidth;
case ScreenDisplayMode.hidden: case ScreenDisplayMode.hidden:
case ScreenDisplayMode.fullScreen: case ScreenDisplayMode.fullScreen:
return 0; return 0;
@@ -8,7 +8,7 @@ import 'package:tmail_ui_user/features/composer/presentation/composer_controller
import 'package:tmail_ui_user/features/composer/presentation/composer_view_web.dart'; import 'package:tmail_ui_user/features/composer/presentation/composer_view_web.dart';
import 'package:tmail_ui_user/features/composer/presentation/extensions/update_screen_display_mode_extension.dart'; import 'package:tmail_ui_user/features/composer/presentation/extensions/update_screen_display_mode_extension.dart';
import 'package:tmail_ui_user/features/composer/presentation/model/screen_display_mode.dart'; import 'package:tmail_ui_user/features/composer/presentation/model/screen_display_mode.dart';
import 'package:tmail_ui_user/features/composer/presentation/utils/composer_utils.dart'; import 'package:tmail_ui_user/features/composer/presentation/styles/composer_style.dart';
import 'package:tmail_ui_user/features/email/presentation/model/composer_arguments.dart'; import 'package:tmail_ui_user/features/email/presentation/model/composer_arguments.dart';
import 'package:tmail_ui_user/main/routes/route_navigation.dart'; import 'package:tmail_ui_user/main/routes/route_navigation.dart';
@@ -90,9 +90,9 @@ class ComposerManager extends GetxController {
} }
final availableWidth = screenWidth final availableWidth = screenWidth
- ComposerUtils.composerExpandMoreButtonMaxWidth - ComposerStyle.composerExpandMoreButtonMaxWidth
- ComposerUtils.padding * 3 - ComposerStyle.padding * 3
- (countDisplayedComposer - 1) * ComposerUtils.space; - (countDisplayedComposer - 1) * ComposerStyle.space;
return ( return (
availableWidth, availableWidth,
@@ -110,7 +110,7 @@ class ComposerManager extends GetxController {
if (currentHiddenComposerIds.isEmpty) return; if (currentHiddenComposerIds.isEmpty) return;
for (var index = currentHiddenComposerIds.length - 1; index >= 0; index--) { for (var index = currentHiddenComposerIds.length - 1; index >= 0; index--) {
final newTotalWidth = totalWidth + ComposerUtils.minimizeWidth; final newTotalWidth = totalWidth + ComposerStyle.minimizeWidth;
if (newTotalWidth > availableWidth) break; if (newTotalWidth > availableWidth) break;
final id = currentHiddenComposerIds.elementAt(index); final id = currentHiddenComposerIds.elementAt(index);
@@ -126,18 +126,18 @@ class ComposerManager extends GetxController {
final controller = composerControllers[id]!; final controller = composerControllers[id]!;
if (controller.isNormalScreen) { if (controller.isNormalScreen) {
var newTotalWidth = totalWidth - (ComposerUtils.normalWidth - ComposerUtils.minimizeWidth); var newTotalWidth = totalWidth - (ComposerStyle.normalWidth - ComposerStyle.minimizeWidth);
var newDisplayMode = ScreenDisplayMode.minimize; var newDisplayMode = ScreenDisplayMode.minimize;
if (newTotalWidth > availableWidth) { if (newTotalWidth > availableWidth) {
newTotalWidth = totalWidth - ComposerUtils.normalWidth; newTotalWidth = totalWidth - ComposerStyle.normalWidth;
newDisplayMode = ScreenDisplayMode.hidden; newDisplayMode = ScreenDisplayMode.hidden;
} }
controller.setScreenDisplayMode(newDisplayMode); controller.setScreenDisplayMode(newDisplayMode);
totalWidth = newTotalWidth; totalWidth = newTotalWidth;
} else if (controller.isMinimizeScreen) { } else if (controller.isMinimizeScreen) {
final newTotalWidth = totalWidth - ComposerUtils.minimizeWidth; final newTotalWidth = totalWidth - ComposerStyle.minimizeWidth;
controller.setScreenDisplayMode(ScreenDisplayMode.hidden); controller.setScreenDisplayMode(ScreenDisplayMode.hidden);
totalWidth = newTotalWidth; totalWidth = newTotalWidth;
} }
@@ -162,7 +162,7 @@ class ComposerManager extends GetxController {
if (currentHiddenComposerIds.isEmpty) return; if (currentHiddenComposerIds.isEmpty) return;
for (var index = currentHiddenComposerIds.length - 1; index >= 0; index--) { for (var index = currentHiddenComposerIds.length - 1; index >= 0; index--) {
final newTotalWidth = totalWidth + ComposerUtils.minimizeWidth; final newTotalWidth = totalWidth + ComposerStyle.minimizeWidth;
if (newTotalWidth > availableWidth) break; if (newTotalWidth > availableWidth) break;
final id = currentHiddenComposerIds.elementAt(index); final id = currentHiddenComposerIds.elementAt(index);
@@ -174,7 +174,7 @@ class ComposerManager extends GetxController {
if (id == updatedComposerId) continue; if (id == updatedComposerId) continue;
composerControllers[id]!.setScreenDisplayMode(ScreenDisplayMode.hidden); composerControllers[id]!.setScreenDisplayMode(ScreenDisplayMode.hidden);
totalWidth -= ComposerUtils.minimizeWidth; totalWidth -= ComposerStyle.minimizeWidth;
if (totalWidth <= availableWidth) return; if (totalWidth <= availableWidth) return;
} }
@@ -182,14 +182,14 @@ class ComposerManager extends GetxController {
if (id == updatedComposerId) continue; if (id == updatedComposerId) continue;
final controller = composerControllers[id]!; final controller = composerControllers[id]!;
var newTotalWidth = totalWidth - (ComposerUtils.normalWidth - ComposerUtils.minimizeWidth); var newTotalWidth = totalWidth - (ComposerStyle.normalWidth - ComposerStyle.minimizeWidth);
if (newTotalWidth <= availableWidth) { if (newTotalWidth <= availableWidth) {
controller.setScreenDisplayMode(ScreenDisplayMode.minimize); controller.setScreenDisplayMode(ScreenDisplayMode.minimize);
return; return;
} }
newTotalWidth = totalWidth - ComposerUtils.normalWidth; newTotalWidth = totalWidth - ComposerStyle.normalWidth;
if (newTotalWidth <= availableWidth) { if (newTotalWidth <= availableWidth) {
controller.setScreenDisplayMode(ScreenDisplayMode.hidden); controller.setScreenDisplayMode(ScreenDisplayMode.hidden);
return; return;
@@ -9,6 +9,14 @@ class ComposerStyle {
static const double keyboardToolBarHeight = 200; static const double keyboardToolBarHeight = 200;
static const double popupMenuRadius = 8; static const double popupMenuRadius = 8;
static const double suggestionItemHeight = 60; static const double suggestionItemHeight = 60;
static const double normalWidth = 725;
static const double normalHeight = 525;
static const double minimizeWidth = 400;
static const double minimizeHeight = 52;
static const double composerExpandMoreButtonMaxWidth = 130;
static const double composerExpandMoreButtonMaxHeight = 52;
static const double padding = 16;
static const double space = 8;
static const Color borderColor = AppColor.colorLineComposer; static const Color borderColor = AppColor.colorLineComposer;
static const Color backgroundEditorColor = Colors.white; static const Color backgroundEditorColor = Colors.white;
@@ -1,11 +1,11 @@
import 'package:flutter/material.dart'; import 'package:flutter/material.dart';
import 'package:tmail_ui_user/features/composer/presentation/utils/composer_utils.dart'; import 'package:tmail_ui_user/features/composer/presentation/styles/composer_style.dart';
class MinimizeComposerWidgetStyle { class MinimizeComposerWidgetStyle {
static const double radius = 24; static const double radius = 24;
static const double elevation = 16; static const double elevation = 16;
static const double width = ComposerUtils.minimizeWidth; static const double width = ComposerStyle.minimizeWidth;
static const double height = ComposerUtils.minimizeHeight; static const double height = ComposerStyle.minimizeHeight;
static const double space = 8; static const double space = 8;
static const double iconSize = 20; static const double iconSize = 20;
@@ -1,13 +1,13 @@
import 'package:flutter/material.dart'; import 'package:flutter/material.dart';
import 'package:tmail_ui_user/features/composer/presentation/utils/composer_utils.dart'; import 'package:tmail_ui_user/features/composer/presentation/styles/composer_style.dart';
class DesktopResponsiveContainerViewStyle { class DesktopResponsiveContainerViewStyle {
static const double radius = 28; static const double radius = 28;
static const double margin = 20; static const double margin = 20;
static const double elevation = 16; static const double elevation = 16;
static const double normalScreenMaxWidth = ComposerUtils.normalWidth; static const double normalScreenMaxWidth = ComposerStyle.normalWidth;
static const double normalScreenMaxHeight = ComposerUtils.normalHeight; static const double normalScreenMaxHeight = ComposerStyle.normalHeight;
static const Color backgroundColor = Colors.white; static const Color backgroundColor = Colors.white;
static const Color outSideBackgroundColor = Colors.black38; static const Color outSideBackgroundColor = Colors.black38;
@@ -1,11 +0,0 @@
class ComposerUtils {
static const double normalWidth = 725;
static const double normalHeight = 525;
static const double minimizeWidth = 400;
static const double minimizeHeight = 52;
static const double composerExpandMoreButtonMaxWidth = 130;
static const double composerExpandMoreButtonMaxHeight = 52;
static const double padding = 16;
static const double space = 8;
}
@@ -4,32 +4,23 @@ import 'package:flutter/material.dart';
import 'package:get/get.dart'; import 'package:get/get.dart';
import 'package:tmail_ui_user/features/composer/presentation/extensions/update_screen_display_mode_extension.dart'; import 'package:tmail_ui_user/features/composer/presentation/extensions/update_screen_display_mode_extension.dart';
import 'package:tmail_ui_user/features/composer/presentation/manager/composer_manager.dart'; import 'package:tmail_ui_user/features/composer/presentation/manager/composer_manager.dart';
import 'package:tmail_ui_user/features/composer/presentation/utils/composer_utils.dart'; import 'package:tmail_ui_user/features/composer/presentation/styles/composer_style.dart';
import 'package:tmail_ui_user/features/composer/presentation/widgets/web/expand_composer_button.dart'; import 'package:tmail_ui_user/features/composer/presentation/widgets/web/expand_composer_button.dart';
class ComposerOverlayView extends StatefulWidget { class ComposerOverlayView extends StatelessWidget {
const ComposerOverlayView({super.key}); final ComposerManager _composerManager = Get.find<ComposerManager>();
final ResponsiveUtils _responsiveUtils = Get.find<ResponsiveUtils>();
@override ComposerOverlayView({super.key});
State<ComposerOverlayView> createState() => _ComposerOverlayViewState();
}
class _ComposerOverlayViewState extends State<ComposerOverlayView> {
late final ComposerManager _composerManager;
late final ResponsiveUtils _responsiveUtils;
@override
void initState() {
super.initState();
_composerManager = Get.find<ComposerManager>();
_responsiveUtils = Get.find<ResponsiveUtils>();
}
@override @override
Widget build(BuildContext context) { Widget build(BuildContext context) {
_composerManager.syncComposerStateWhenResponsiveChanged( if (_composerManager.composers.isNotEmpty) {
screenWidth: context.width, _composerManager.syncComposerStateWhenResponsiveChanged(
); screenWidth: context.width,
);
}
return Obx(() { return Obx(() {
final composers = _composerManager.composers; final composers = _composerManager.composers;
final composerIdsQueue = _composerManager.composerIdsQueue; final composerIdsQueue = _composerManager.composerIdsQueue;
@@ -58,7 +49,7 @@ class _ComposerOverlayViewState extends State<ComposerOverlayView> {
child: SingleChildScrollView( child: SingleChildScrollView(
scrollDirection: Axis.horizontal, scrollDirection: Axis.horizontal,
child: Padding( child: Padding(
padding: const EdgeInsetsDirectional.all(ComposerUtils.padding), padding: const EdgeInsetsDirectional.all(ComposerStyle.padding),
child: Row( child: Row(
crossAxisAlignment: CrossAxisAlignment.end, crossAxisAlignment: CrossAxisAlignment.end,
mainAxisSize: MainAxisSize.min, mainAxisSize: MainAxisSize.min,
@@ -6,7 +6,7 @@ import 'package:flutter_svg/flutter_svg.dart';
import 'package:get/get.dart'; import 'package:get/get.dart';
import 'package:pointer_interceptor/pointer_interceptor.dart'; import 'package:pointer_interceptor/pointer_interceptor.dart';
import 'package:tmail_ui_user/features/composer/presentation/manager/composer_manager.dart'; import 'package:tmail_ui_user/features/composer/presentation/manager/composer_manager.dart';
import 'package:tmail_ui_user/features/composer/presentation/utils/composer_utils.dart'; import 'package:tmail_ui_user/features/composer/presentation/styles/composer_style.dart';
import 'package:tmail_ui_user/features/composer/presentation/widgets/web/hidden_composer_list_view_overlay.dart'; import 'package:tmail_ui_user/features/composer/presentation/widgets/web/hidden_composer_list_view_overlay.dart';
import 'package:tmail_ui_user/main/localizations/app_localizations.dart'; import 'package:tmail_ui_user/main/localizations/app_localizations.dart';
@@ -57,8 +57,8 @@ class _ExpandComposerButtonState extends State<ExpandComposerButton> {
borderRadius: const BorderRadius.all(Radius.circular(12)), borderRadius: const BorderRadius.all(Radius.circular(12)),
child: Container( child: Container(
color: Colors.white, color: Colors.white,
width: ComposerUtils.composerExpandMoreButtonMaxWidth, width: ComposerStyle.composerExpandMoreButtonMaxWidth,
height: ComposerUtils.composerExpandMoreButtonMaxHeight, height: ComposerStyle.composerExpandMoreButtonMaxHeight,
padding: const EdgeInsetsDirectional.symmetric(horizontal: 8), padding: const EdgeInsetsDirectional.symmetric(horizontal: 8),
child: Row( child: Row(
children: [ children: [
@@ -4,8 +4,8 @@ import 'package:core/presentation/utils/responsive_utils.dart';
import 'package:flutter/material.dart'; import 'package:flutter/material.dart';
import 'package:tmail_ui_user/features/composer/presentation/composer_controller.dart'; import 'package:tmail_ui_user/features/composer/presentation/composer_controller.dart';
import 'package:tmail_ui_user/features/composer/presentation/manager/composer_manager.dart'; import 'package:tmail_ui_user/features/composer/presentation/manager/composer_manager.dart';
import 'package:tmail_ui_user/features/composer/presentation/styles/composer_style.dart';
import 'package:tmail_ui_user/features/composer/presentation/styles/web/hidden_composer_item_style.dart'; import 'package:tmail_ui_user/features/composer/presentation/styles/web/hidden_composer_item_style.dart';
import 'package:tmail_ui_user/features/composer/presentation/utils/composer_utils.dart';
import 'package:tmail_ui_user/features/composer/presentation/widgets/web/hidden_composer_item.dart'; import 'package:tmail_ui_user/features/composer/presentation/widgets/web/hidden_composer_item.dart';
typedef OnRemoveHiddenComposerItem = Function(ComposerController controller); typedef OnRemoveHiddenComposerItem = Function(ComposerController controller);
@@ -32,8 +32,8 @@ class HiddenComposerListViewOverlay extends StatelessWidget {
Widget build(BuildContext context) { Widget build(BuildContext context) {
final hiddenComposerIds = composerManager.hiddenComposerIds; final hiddenComposerIds = composerManager.hiddenComposerIds;
final maxHeight = responsiveUtils.getSizeScreenHeight(context) final maxHeight = responsiveUtils.getSizeScreenHeight(context)
- ComposerUtils.composerExpandMoreButtonMaxHeight - ComposerStyle.composerExpandMoreButtonMaxHeight
- ComposerUtils.padding * 2; - ComposerStyle.padding * 2;
return Container( return Container(
constraints: BoxConstraints(maxHeight: maxHeight), constraints: BoxConstraints(maxHeight: maxHeight),
@@ -198,7 +198,7 @@ class MailboxDashBoardView extends BaseMailboxDashBoardView {
} }
}), }),
), ),
const ComposerOverlayView(), ComposerOverlayView(),
Obx(() => controller.searchMailboxActivated.value == true && !controller.responsiveUtils.isWebDesktop(context) Obx(() => controller.searchMailboxActivated.value == true && !controller.responsiveUtils.isWebDesktop(context)
? const SearchMailboxView() ? const SearchMailboxView()
: const SizedBox.shrink() : const SizedBox.shrink()