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:
@@ -1,13 +1,9 @@
|
||||
|
||||
import 'dart:math';
|
||||
|
||||
import 'package:collection/collection.dart';
|
||||
import 'package:core/presentation/resources/image_paths.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';
|
||||
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';
|
||||
import 'package:tmail_ui_user/features/composer/presentation/utils/composer_utils.dart';
|
||||
import 'package:tmail_ui_user/features/composer/presentation/widgets/expand_composer_button.dart';
|
||||
|
||||
class ComposerOverlayView extends StatefulWidget {
|
||||
@@ -18,93 +14,52 @@ class ComposerOverlayView extends StatefulWidget {
|
||||
}
|
||||
|
||||
class _ComposerOverlayViewState extends State<ComposerOverlayView> {
|
||||
late final ComposerManager _composerManager;
|
||||
late final ImagePaths _imagePaths;
|
||||
|
||||
final ComposerManager _composerManager = Get.find<ComposerManager>();
|
||||
final ImagePaths _imagePaths = Get.find<ImagePaths>();
|
||||
@override
|
||||
void initState() {
|
||||
super.initState();
|
||||
_composerManager = Get.find<ComposerManager>();
|
||||
_imagePaths = Get.find<ImagePaths>();
|
||||
}
|
||||
|
||||
@override
|
||||
Widget build(BuildContext context) {
|
||||
return Obx(() {
|
||||
final composers = _composerManager.composers;
|
||||
if (composers.isEmpty) return const SizedBox.shrink();
|
||||
final composerIdsQueue = _composerManager.composerIdsQueue;
|
||||
if (composers.isEmpty || composerIdsQueue.isEmpty) return const SizedBox.shrink();
|
||||
|
||||
if (composers.length == 1) {
|
||||
return _composerManager.getComposerView(_composerManager.singleComposerId);
|
||||
final fullScreenComposerView = _composerManager.firstFullScreenComposerView;
|
||||
if (fullScreenComposerView != null) return fullScreenComposerView;
|
||||
|
||||
if (composerIdsQueue.length == 1) {
|
||||
return _composerManager.getComposerView(composerIdsQueue.first);
|
||||
}
|
||||
|
||||
final countComposerHidden = _composerManager.countComposerHidden;
|
||||
final visibleComposers = composerIdsQueue
|
||||
.map(_composerManager.getComposerView)
|
||||
.where((view) => !view.controller.isHiddenScreen)
|
||||
.toList();
|
||||
|
||||
return Align(
|
||||
alignment: AlignmentDirectional.bottomEnd,
|
||||
child: Padding(
|
||||
padding: const EdgeInsetsDirectional.symmetric(
|
||||
horizontal: 24,
|
||||
vertical: 16,
|
||||
),
|
||||
child: LayoutBuilder(
|
||||
builder: (_, constraints) {
|
||||
final availableWidth = constraints.maxWidth - ComposerUtils.composerExpandMoreButtonMaxWidth;
|
||||
|
||||
final composerIds = _composerManager.composerIdsQueue.toList();
|
||||
final composerViews = composerIds
|
||||
.map((id) => _composerManager.getComposerView(id))
|
||||
.toList();
|
||||
|
||||
final countNormalComposer = composerViews.where(
|
||||
(view) => view.controller.screenDisplayMode.value == ScreenDisplayMode.normal,
|
||||
).length;
|
||||
|
||||
final maxNormalComposer = ComposerUtils.calculateNormalWidgets(availableWidth);
|
||||
final countDisplayNormalComposer = min(
|
||||
countNormalComposer,
|
||||
maxNormalComposer,
|
||||
);
|
||||
|
||||
final countDisplayComposer = countDisplayNormalComposer > 0
|
||||
? ComposerUtils.calculateNormalAndMinimizeWidgets(availableWidth, countDisplayNormalComposer)
|
||||
: ComposerUtils.calculateMinimizeWidgets(availableWidth);
|
||||
|
||||
if (countDisplayComposer < 1) return const SizedBox.shrink();
|
||||
|
||||
Iterable<String> composerIdsDisplayed = [];
|
||||
if (composerIds.length > countDisplayComposer) {
|
||||
composerIdsDisplayed = composerIds
|
||||
.reversed
|
||||
.take(countDisplayComposer)
|
||||
.toList()
|
||||
.reversed;
|
||||
} else {
|
||||
composerIdsDisplayed = composerIds;
|
||||
}
|
||||
|
||||
final countMinimizeComposer =
|
||||
composerIdsDisplayed.length - countDisplayNormalComposer;
|
||||
|
||||
int countComposerHidden = composerIds.length - countDisplayComposer;
|
||||
|
||||
return Row(
|
||||
crossAxisAlignment: CrossAxisAlignment.end,
|
||||
mainAxisAlignment: MainAxisAlignment.center,
|
||||
mainAxisSize: MainAxisSize.min,
|
||||
children: [
|
||||
if (countComposerHidden > 0)
|
||||
ExpandComposerButton(
|
||||
imagePaths: _imagePaths,
|
||||
countComposerHidden: countComposerHidden,
|
||||
onToggleDisplayComposerAction: () {},
|
||||
),
|
||||
...composerIdsDisplayed.mapIndexed((index, id) {
|
||||
final composerView = _composerManager.getComposerView(id);
|
||||
final isMinimized = countDisplayNormalComposer < 1 ||
|
||||
(countMinimizeComposer > 0 && index < countMinimizeComposer);
|
||||
|
||||
composerView.controller.screenDisplayMode.value = isMinimized
|
||||
? ScreenDisplayMode.minimize
|
||||
: ScreenDisplayMode.normal;
|
||||
|
||||
return composerView;
|
||||
}).toList(),
|
||||
],
|
||||
);
|
||||
}
|
||||
padding: const EdgeInsetsDirectional.symmetric(horizontal: 24, vertical: 16),
|
||||
child: Row(
|
||||
crossAxisAlignment: CrossAxisAlignment.end,
|
||||
mainAxisSize: MainAxisSize.min,
|
||||
children: [
|
||||
if (countComposerHidden > 0)
|
||||
ExpandComposerButton(
|
||||
imagePaths: _imagePaths,
|
||||
countComposerHidden: countComposerHidden,
|
||||
onToggleDisplayComposerAction: () {},
|
||||
),
|
||||
...visibleComposers,
|
||||
],
|
||||
),
|
||||
),
|
||||
);
|
||||
|
||||
Reference in New Issue
Block a user