TF-3479 Update logic Show <-> Hide <-> Minimize multiple composer

Signed-off-by: dab246 <tdvu@linagora.com>
This commit is contained in:
dab246
2025-03-11 16:27:44 +07:00
committed by Dat H. Pham
parent a0160f09f3
commit d2e5d35755
5 changed files with 100 additions and 89 deletions
@@ -1,5 +1,4 @@
import 'package:core/presentation/utils/responsive_utils.dart';
import 'package:flutter/material.dart';
import 'package:get/get.dart';
import 'package:tmail_ui_user/features/composer/presentation/extensions/update_screen_display_mode_extension.dart';
@@ -8,84 +7,90 @@ import 'package:tmail_ui_user/features/composer/presentation/styles/composer_sty
import 'package:tmail_ui_user/features/composer/presentation/widgets/web/expand_composer_button.dart';
class ComposerOverlayView extends StatelessWidget {
final ComposerManager _composerManager = Get.find<ComposerManager>();
final ResponsiveUtils _responsiveUtils = Get.find<ResponsiveUtils>();
final ComposerManager composerManager;
final bool isDesktopScreen;
ComposerOverlayView({super.key});
const ComposerOverlayView({
super.key,
required this.composerManager,
required this.isDesktopScreen,
});
@override
Widget build(BuildContext context) {
final screenWidth = MediaQuery.sizeOf(context).width;
if (_composerManager.composers.isNotEmpty) {
_composerManager.arrangeComposerWhenResponsiveChanged(screenWidth: screenWidth);
}
return Obx(() {
final composers = _composerManager.composers;
final composerIdsQueue = _composerManager.composerIdsQueue;
final composers = composerManager.composers;
final composerIdsQueue = composerManager.composerIdsQueue;
if (composers.isEmpty || composerIdsQueue.isEmpty) return const SizedBox.shrink();
if (!_responsiveUtils.isDesktop(context)) {
final firstResponsiveComposerView = _composerManager.firstComposerViewWhenResponsiveChanged;
if (!isDesktopScreen) {
final firstResponsiveComposerView = composerManager.firstComposerViewWhenResponsiveChanged;
if (firstResponsiveComposerView != null) return firstResponsiveComposerView;
}
final fullScreenComposerView = _composerManager.firstFullScreenComposerView;
final fullScreenComposerView = composerManager.firstFullScreenComposerView;
if (fullScreenComposerView != null) return fullScreenComposerView;
if (composerIdsQueue.length == 1) {
final composerView = _composerManager.getComposerView(composerIdsQueue.first);
final composerView = composerManager.getComposerView(composerIdsQueue.first);
if (composerView.controller.isHiddenScreen) {
return Align(
alignment: AlignmentDirectional.bottomEnd,
child: SingleChildScrollView(
scrollDirection: Axis.horizontal,
child: Padding(
padding: const EdgeInsetsDirectional.all(ComposerStyle.padding),
child: ExpandComposerButton(
countComposerHidden: 1,
onRemoveHiddenComposerItem: (controller) =>
controller.handleClickCloseComposer(context),
onShowComposerAction: _composerManager.showComposerIfHidden,
return Stack(
children: [
Align(
alignment: AlignmentDirectional.bottomEnd,
child: SingleChildScrollView(
scrollDirection: Axis.horizontal,
child: Padding(
padding: const EdgeInsetsDirectional.all(ComposerStyle.padding),
child: ExpandComposerButton(
countComposerHidden: 1,
onRemoveHiddenComposerItem: (controller) =>
controller.handleClickCloseComposer(context),
onShowComposerAction: composerManager.showComposerIfHidden,
),
),
),
),
),
],
);
} else {
return composerView;
}
}
final countComposerHidden = _composerManager.countComposerHidden;
final countComposerHidden = composerManager.countComposerHidden;
final visibleComposers = composerIdsQueue
.map(_composerManager.getComposerView)
.map(composerManager.getComposerView)
.where((view) => !view.controller.isHiddenScreen)
.toList();
return Align(
alignment: AlignmentDirectional.bottomEnd,
child: SingleChildScrollView(
scrollDirection: Axis.horizontal,
child: Padding(
padding: const EdgeInsetsDirectional.all(ComposerStyle.padding),
child: Row(
crossAxisAlignment: CrossAxisAlignment.end,
mainAxisSize: MainAxisSize.min,
children: [
if (countComposerHidden > 0)
ExpandComposerButton(
countComposerHidden: countComposerHidden,
onRemoveHiddenComposerItem: (controller) =>
controller.handleClickCloseComposer(context),
onShowComposerAction: _composerManager.showComposerIfHidden,
),
...visibleComposers,
],
return Stack(
children: [
Align(
alignment: AlignmentDirectional.bottomEnd,
child: SingleChildScrollView(
scrollDirection: Axis.horizontal,
child: Padding(
padding: const EdgeInsetsDirectional.all(ComposerStyle.padding),
child: Row(
crossAxisAlignment: CrossAxisAlignment.end,
mainAxisSize: MainAxisSize.min,
children: [
if (countComposerHidden > 0)
ExpandComposerButton(
countComposerHidden: countComposerHidden,
onRemoveHiddenComposerItem: (controller) =>
controller.handleClickCloseComposer(context),
onShowComposerAction: composerManager.showComposerIfHidden,
),
...visibleComposers,
],
),
),
),
),
),
],
);
});
}