Fix bottom overflow of confirm dialog save message on landscape mobile

Signed-off-by: dab246 <tdvu@linagora.com>
This commit is contained in:
dab246
2025-07-03 01:43:09 +07:00
committed by Dat H. Pham
parent 497b6325a8
commit 8c0a3bccfa
3 changed files with 21 additions and 4 deletions
@@ -32,6 +32,7 @@ class ConfirmationDialogBuilder extends StatelessWidget {
final List<TextSpan>? listTextSpan; final List<TextSpan>? listTextSpan;
final bool isArrangeActionButtonsVertical; final bool isArrangeActionButtonsVertical;
final bool useIconAsBasicLogo; final bool useIconAsBasicLogo;
final bool isScrollContentEnabled;
final OnConfirmButtonAction? onConfirmButtonAction; final OnConfirmButtonAction? onConfirmButtonAction;
final OnCancelButtonAction? onCancelButtonAction; final OnCancelButtonAction? onCancelButtonAction;
final OnCloseButtonAction? onCloseButtonAction; final OnCloseButtonAction? onCloseButtonAction;
@@ -59,6 +60,7 @@ class ConfirmationDialogBuilder extends StatelessWidget {
this.listTextSpan, this.listTextSpan,
this.isArrangeActionButtonsVertical = false, this.isArrangeActionButtonsVertical = false,
this.useIconAsBasicLogo = false, this.useIconAsBasicLogo = false,
this.isScrollContentEnabled = false,
this.onConfirmButtonAction, this.onConfirmButtonAction,
this.onCancelButtonAction, this.onCancelButtonAction,
this.onCloseButtonAction, this.onCloseButtonAction,
@@ -84,6 +86,7 @@ class ConfirmationDialogBuilder extends StatelessWidget {
listTextSpan: listTextSpan, listTextSpan: listTextSpan,
isArrangeActionButtonsVertical: isArrangeActionButtonsVertical, isArrangeActionButtonsVertical: isArrangeActionButtonsVertical,
useIconAsBasicLogo: useIconAsBasicLogo, useIconAsBasicLogo: useIconAsBasicLogo,
isScrollContentEnabled: isScrollContentEnabled,
onConfirmButtonAction: onConfirmButtonAction, onConfirmButtonAction: onConfirmButtonAction,
onCancelButtonAction: onCancelButtonAction, onCancelButtonAction: onCancelButtonAction,
onCloseButtonAction: onCloseButtonAction, onCloseButtonAction: onCloseButtonAction,
@@ -112,6 +115,7 @@ class ConfirmationDialogBuilder extends StatelessWidget {
listTextSpan: listTextSpan, listTextSpan: listTextSpan,
isArrangeActionButtonsVertical: isArrangeActionButtonsVertical, isArrangeActionButtonsVertical: isArrangeActionButtonsVertical,
useIconAsBasicLogo: useIconAsBasicLogo, useIconAsBasicLogo: useIconAsBasicLogo,
isScrollContentEnabled: isScrollContentEnabled,
onConfirmButtonAction: onConfirmButtonAction, onConfirmButtonAction: onConfirmButtonAction,
onCancelButtonAction: onCancelButtonAction, onCancelButtonAction: onCancelButtonAction,
onCloseButtonAction: onCloseButtonAction, onCloseButtonAction: onCloseButtonAction,
@@ -137,6 +141,7 @@ class _BodyContent extends StatelessWidget {
final List<TextSpan>? listTextSpan; final List<TextSpan>? listTextSpan;
final bool isArrangeActionButtonsVertical; final bool isArrangeActionButtonsVertical;
final bool useIconAsBasicLogo; final bool useIconAsBasicLogo;
final bool isScrollContentEnabled;
final OnConfirmButtonAction? onConfirmButtonAction; final OnConfirmButtonAction? onConfirmButtonAction;
final OnCancelButtonAction? onCancelButtonAction; final OnCancelButtonAction? onCancelButtonAction;
final OnCloseButtonAction? onCloseButtonAction; final OnCloseButtonAction? onCloseButtonAction;
@@ -147,6 +152,10 @@ class _BodyContent extends StatelessWidget {
required this.textContent, required this.textContent,
required this.confirmText, required this.confirmText,
required this.cancelText, required this.cancelText,
required this.maxWidth,
required this.isArrangeActionButtonsVertical,
required this.useIconAsBasicLogo,
this.isScrollContentEnabled = false,
this.iconWidget, this.iconWidget,
this.additionalWidgetContent, this.additionalWidgetContent,
this.cancelBackgroundButtonColor, this.cancelBackgroundButtonColor,
@@ -154,10 +163,7 @@ class _BodyContent extends StatelessWidget {
this.cancelLabelButtonColor, this.cancelLabelButtonColor,
this.confirmLabelButtonColor, this.confirmLabelButtonColor,
this.margin, this.margin,
required this.maxWidth,
this.listTextSpan, this.listTextSpan,
required this.isArrangeActionButtonsVertical,
required this.useIconAsBasicLogo,
this.onConfirmButtonAction, this.onConfirmButtonAction,
this.onCancelButtonAction, this.onCancelButtonAction,
this.onCloseButtonAction, this.onCloseButtonAction,
@@ -165,7 +171,7 @@ class _BodyContent extends StatelessWidget {
@override @override
Widget build(BuildContext context) { Widget build(BuildContext context) {
return Container( final child = Container(
width: 421, width: 421,
constraints: BoxConstraints(maxWidth: maxWidth), constraints: BoxConstraints(maxWidth: maxWidth),
decoration: const BoxDecoration( decoration: const BoxDecoration(
@@ -197,6 +203,12 @@ class _BodyContent extends StatelessWidget {
], ],
), ),
); );
if (isScrollContentEnabled) {
return SingleChildScrollView(child: child);
} else {
return child;
}
} }
bool _showCloseButton() => onCloseButtonAction != null; bool _showCloseButton() => onCloseButtonAction != null;
@@ -40,6 +40,7 @@ mixin MessageDialogActionMixin {
PopInvokedWithResultCallback? onPopInvoked, PopInvokedWithResultCallback? onPopInvoked,
bool isArrangeActionButtonsVertical = false, bool isArrangeActionButtonsVertical = false,
bool useIconAsBasicLogo = false, bool useIconAsBasicLogo = false,
bool isScrollContentEnabled = false,
EdgeInsetsGeometry? dialogMargin, EdgeInsetsGeometry? dialogMargin,
} }
) async { ) async {
@@ -54,6 +55,7 @@ mixin MessageDialogActionMixin {
listTextSpan: listTextSpan, listTextSpan: listTextSpan,
isArrangeActionButtonsVertical: isArrangeActionButtonsVertical, isArrangeActionButtonsVertical: isArrangeActionButtonsVertical,
useIconAsBasicLogo: useIconAsBasicLogo, useIconAsBasicLogo: useIconAsBasicLogo,
isScrollContentEnabled: isScrollContentEnabled,
title: title ?? '', title: title ?? '',
textContent: message, textContent: message,
confirmText: actionName, confirmText: actionName,
@@ -106,6 +108,7 @@ mixin MessageDialogActionMixin {
confirmText: actionName, confirmText: actionName,
cancelText: hasCancelButton ? cancelTitle ?? AppLocalizations.of(context).cancel : '', cancelText: hasCancelButton ? cancelTitle ?? AppLocalizations.of(context).cancel : '',
useIconAsBasicLogo: useIconAsBasicLogo, useIconAsBasicLogo: useIconAsBasicLogo,
isScrollContentEnabled: isScrollContentEnabled,
onConfirmButtonAction: () { onConfirmButtonAction: () {
if (autoPerformPopBack) { if (autoPerformPopBack) {
popBack(); popBack();
@@ -161,6 +164,7 @@ mixin MessageDialogActionMixin {
listTextSpan: listTextSpan, listTextSpan: listTextSpan,
isArrangeActionButtonsVertical: isArrangeActionButtonsVertical, isArrangeActionButtonsVertical: isArrangeActionButtonsVertical,
useIconAsBasicLogo: useIconAsBasicLogo, useIconAsBasicLogo: useIconAsBasicLogo,
isScrollContentEnabled: isScrollContentEnabled,
title: title ?? '', title: title ?? '',
textContent: message, textContent: message,
iconWidget: icon, iconWidget: icon,
@@ -1938,6 +1938,7 @@ class ComposerController extends BaseController
outsideDismissible: false, outsideDismissible: false,
autoPerformPopBack: false, autoPerformPopBack: false,
isArrangeActionButtonsVertical: true, isArrangeActionButtonsVertical: true,
isScrollContentEnabled: responsiveUtils.isLandscapeMobile(context),
usePopScope: true, usePopScope: true,
onConfirmAction: () => _handleSaveMessageToDraft(context), onConfirmAction: () => _handleSaveMessageToDraft(context),
onCancelAction: () { onCancelAction: () {