TF-3479 Handle switch state display mode of multiple composer (Fullscreen <-> Normal <-> Minimize)

Signed-off-by: dab246 <tdvu@linagora.com>
This commit is contained in:
dab246
2025-02-14 02:03:22 +07:00
committed by Dat H. Pham
parent c603b5e40b
commit e6ad72e42d
8 changed files with 283 additions and 211 deletions
@@ -1,6 +1,5 @@
import 'package:core/presentation/utils/responsive_utils.dart';
import 'package:flutter/material.dart';
import 'package:get/get.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/model/screen_display_mode.dart';
@@ -10,17 +9,17 @@ import 'package:tmail_ui_user/features/composer/presentation/widgets/web/minimiz
class DesktopResponsiveContainerView extends StatelessWidget {
final ResponsiveUtils responsiveUtils;
final ComposerManager composerManager;
final ScreenDisplayMode displayMode;
final String emailSubject;
final VoidCallback onCloseViewAction;
final OnChangeDisplayModeAction onChangeDisplayModeAction;
final Widget Function(BuildContext context, BoxConstraints constraints) childBuilder;
final ComposerManager _composerManager = Get.find<ComposerManager>();
DesktopResponsiveContainerView({
const DesktopResponsiveContainerView({
super.key,
required this.childBuilder,
required this.composerManager,
required this.responsiveUtils,
required this.displayMode,
required this.emailSubject,
@@ -31,71 +30,47 @@ class DesktopResponsiveContainerView extends StatelessWidget {
@override
Widget build(BuildContext context) {
if (displayMode == ScreenDisplayMode.minimize) {
if (_composerManager.composerIds.length == 1) {
return PositionedDirectional(
final composerWidget = PointerInterceptor(
child: MinimizeComposerWidget(
emailSubject: emailSubject,
onCloseViewAction: onCloseViewAction,
onChangeDisplayModeAction: onChangeDisplayModeAction,
),
);
return composerManager.composerIdsQueue.length == 1
? PositionedDirectional(
end: DesktopResponsiveContainerViewStyle.margin,
bottom: DesktopResponsiveContainerViewStyle.margin,
child: PointerInterceptor(
child: MinimizeComposerWidget(
emailSubject: emailSubject,
onCloseViewAction: onCloseViewAction,
onChangeDisplayModeAction: onChangeDisplayModeAction,
),
)
);
} else {
return PointerInterceptor(
child: MinimizeComposerWidget(
emailSubject: emailSubject,
onCloseViewAction: onCloseViewAction,
onChangeDisplayModeAction: onChangeDisplayModeAction,
),
);
}
child: composerWidget,
)
: composerWidget;
} else if (displayMode == ScreenDisplayMode.normal) {
if (_composerManager.composerIds.length == 1) {
return PositionedDirectional(
final composerWidget = Card(
elevation: DesktopResponsiveContainerViewStyle.elevation,
shape: const RoundedRectangleBorder(
borderRadius: BorderRadius.all(Radius.circular(DesktopResponsiveContainerViewStyle.radius)),
),
clipBehavior: Clip.antiAlias,
child: Container(
color: DesktopResponsiveContainerViewStyle.backgroundColor,
width: DesktopResponsiveContainerViewStyle.normalScreenMaxWidth,
height: DesktopResponsiveContainerViewStyle.normalScreenMaxHeight,
child: LayoutBuilder(builder: (context, constraints) =>
PointerInterceptor(
child: childBuilder.call(context, constraints),
)
),
),
);
return composerManager.composerIdsQueue.length == 1
? PositionedDirectional(
end: DesktopResponsiveContainerViewStyle.margin,
bottom: DesktopResponsiveContainerViewStyle.margin,
child: Card(
elevation: DesktopResponsiveContainerViewStyle.elevation,
shape: const RoundedRectangleBorder(
borderRadius: BorderRadius.all(Radius.circular(DesktopResponsiveContainerViewStyle.radius))
),
clipBehavior: Clip.antiAlias,
child: Container(
color: DesktopResponsiveContainerViewStyle.backgroundColor,
width: DesktopResponsiveContainerViewStyle.normalScreenMaxWidth,
height: DesktopResponsiveContainerViewStyle.normalScreenMaxHeight,
child: LayoutBuilder(builder: (context, constraints) =>
PointerInterceptor(
child: childBuilder.call(context, constraints)
)
)
),
)
);
} else {
return Card(
elevation: DesktopResponsiveContainerViewStyle.elevation,
shape: const RoundedRectangleBorder(
borderRadius: BorderRadius.all(Radius.circular(DesktopResponsiveContainerViewStyle.radius))
),
clipBehavior: Clip.antiAlias,
child: Container(
color: DesktopResponsiveContainerViewStyle.backgroundColor,
width: DesktopResponsiveContainerViewStyle.normalScreenMaxWidth,
height: DesktopResponsiveContainerViewStyle.normalScreenMaxHeight,
child: LayoutBuilder(builder: (context, constraints) =>
PointerInterceptor(
child: childBuilder.call(context, constraints)
)
)
),
);
}
child: composerWidget,
)
: composerWidget;
} else if (displayMode == ScreenDisplayMode.fullScreen) {
final maxWidth = responsiveUtils.getSizeScreenWidth(context) * 0.85;
final maxHeight = responsiveUtils.getSizeScreenHeight(context) * 0.9;