TF-1611 Fix bottom padding too large in vacation view

(cherry picked from commit 943102f54285fc3c9291160cc685e42bbdfbf168)
This commit is contained in:
dab246
2023-03-22 12:13:41 +07:00
committed by Dat Vu
parent 60dd32b790
commit 471713ebd7
3 changed files with 274 additions and 263 deletions
@@ -7,25 +7,33 @@ class SettingDetailViewBuilder extends StatelessWidget {
final ResponsiveUtils responsiveUtils; final ResponsiveUtils responsiveUtils;
final Widget child; final Widget child;
final EdgeInsets? padding;
final VoidCallback? onTapGestureDetector;
const SettingDetailViewBuilder({ const SettingDetailViewBuilder({
super.key, super.key,
required this.responsiveUtils, required this.responsiveUtils,
required this.child required this.child,
this.padding,
this.onTapGestureDetector
}); });
@override @override
Widget build(BuildContext context) { Widget build(BuildContext context) {
return Scaffold( return Scaffold(
backgroundColor: SettingsUtils.getBackgroundColor(context, responsiveUtils), backgroundColor: SettingsUtils.getBackgroundColor(context, responsiveUtils),
body: Container( body: GestureDetector(
onTap: onTapGestureDetector,
child: Container(
width: double.infinity, width: double.infinity,
height: double.infinity, height: double.infinity,
color: SettingsUtils.getContentBackgroundColor(context, responsiveUtils), color: SettingsUtils.getContentBackgroundColor(context, responsiveUtils),
decoration: SettingsUtils.getBoxDecorationForContent(context, responsiveUtils), decoration: SettingsUtils.getBoxDecorationForContent(context, responsiveUtils),
margin: SettingsUtils.getMarginSettingDetailsView(context, responsiveUtils), margin: SettingsUtils.getMarginSettingDetailsView(context, responsiveUtils),
padding: padding,
child: child, child: child,
), ),
),
); );
} }
} }
@@ -1,4 +1,17 @@
import 'package:core/presentation/utils/responsive_utils.dart';
import 'package:flutter/material.dart';
class VacationUtils { class VacationUtils {
static const String vacationTagName = 'Vacation'; static const String vacationTagName = 'Vacation';
static EdgeInsets getPaddingView(BuildContext context, ResponsiveUtils responsiveUtils) {
if (responsiveUtils.isDesktop(context)) {
return const EdgeInsets.symmetric(vertical: 24, horizontal: 20);
} else if (responsiveUtils.isTabletLarge(context) || responsiveUtils.isTablet(context)) {
return const EdgeInsets.symmetric(horizontal: 28, vertical: 24);
} else {
return const EdgeInsets.symmetric(horizontal: 12, vertical: 24);
}
}
} }
@@ -11,10 +11,11 @@ import 'package:tmail_ui_user/features/base/widget/text_input_decoration_builder
import 'package:tmail_ui_user/features/base/widget/text_input_field_builder.dart'; import 'package:tmail_ui_user/features/base/widget/text_input_field_builder.dart';
import 'package:tmail_ui_user/features/composer/presentation/mixin/rich_text_button_mixin.dart'; import 'package:tmail_ui_user/features/composer/presentation/mixin/rich_text_button_mixin.dart';
import 'package:tmail_ui_user/features/composer/presentation/model/button_layout_type.dart'; import 'package:tmail_ui_user/features/composer/presentation/model/button_layout_type.dart';
import 'package:tmail_ui_user/features/manage_account/presentation/menu/settings_utils.dart'; import 'package:tmail_ui_user/features/manage_account/presentation/base/setting_detail_view_builder.dart';
import 'package:tmail_ui_user/features/manage_account/presentation/model/vacation/date_type.dart'; import 'package:tmail_ui_user/features/manage_account/presentation/model/vacation/date_type.dart';
import 'package:tmail_ui_user/features/manage_account/presentation/model/vacation/vacation_message_type.dart'; import 'package:tmail_ui_user/features/manage_account/presentation/model/vacation/vacation_message_type.dart';
import 'package:tmail_ui_user/features/manage_account/presentation/model/vacation/vacation_responder_status.dart'; import 'package:tmail_ui_user/features/manage_account/presentation/model/vacation/vacation_responder_status.dart';
import 'package:tmail_ui_user/features/manage_account/presentation/vacation/utils/vacation_utils.dart';
import 'package:tmail_ui_user/features/manage_account/presentation/vacation/vacation_controller.dart'; import 'package:tmail_ui_user/features/manage_account/presentation/vacation/vacation_controller.dart';
import 'package:tmail_ui_user/main/localizations/app_localizations.dart'; import 'package:tmail_ui_user/main/localizations/app_localizations.dart';
import 'package:html_editor_enhanced/html_editor.dart' as html_editor_browser; import 'package:html_editor_enhanced/html_editor.dart' as html_editor_browser;
@@ -28,13 +29,10 @@ class VacationView extends GetWidget<VacationController> with RichTextButtonMixi
@override @override
Widget build(BuildContext context) { Widget build(BuildContext context) {
return Scaffold( if (BuildUtils.isWeb) {
backgroundColor: _responsiveUtils.isWebDesktop(context) return _buildVacationFormView(context);
? AppColor.colorBgDesktop } else {
: Colors.white, return KeyboardRichText(
body: GestureDetector(
onTap: () => FocusScope.of(context).unfocus(),
child: KeyboardRichText(
richTextController: controller.richTextControllerForMobile, richTextController: controller.richTextControllerForMobile,
keyBroadToolbar: RichTextKeyboardToolBar( keyBroadToolbar: RichTextKeyboardToolBar(
titleBack: AppLocalizations.of(context).format, titleBack: AppLocalizations.of(context).format,
@@ -45,39 +43,44 @@ class VacationView extends GetWidget<VacationController> with RichTextButtonMixi
titleBackgroundBottomSheet: AppLocalizations.of(context).background, titleBackgroundBottomSheet: AppLocalizations.of(context).background,
titleForegroundBottomSheet: AppLocalizations.of(context).foreground, titleForegroundBottomSheet: AppLocalizations.of(context).foreground,
), ),
child: Container( child: _buildVacationFormView(context)
width: double.infinity, );
height: double.infinity, }
margin: _responsiveUtils.isWebDesktop(context) }
? const EdgeInsets.all(24)
: EdgeInsets.zero, Widget _buildVacationFormView(BuildContext context) {
decoration: _responsiveUtils.isWebDesktop(context) return SettingDetailViewBuilder(
? BoxDecoration( responsiveUtils: _responsiveUtils,
borderRadius: BorderRadius.circular(20), padding: const EdgeInsets.symmetric(horizontal: 4),
border: Border.all(color: AppColor.colorBorderBodyThread, width: 1), onTapGestureDetector: () => controller.clearFocusEditor(context),
color: Colors.white)
: null,
padding: SettingsUtils.getMarginViewForSettingDetails(context, _responsiveUtils),
child: SingleChildScrollView( child: SingleChildScrollView(
physics: const ClampingScrollPhysics(), physics: const ClampingScrollPhysics(),
controller: controller.scrollController, controller: controller.scrollController,
child: Padding(
padding: VacationUtils.getPaddingView(context, _responsiveUtils),
child: Column( child: Column(
crossAxisAlignment: CrossAxisAlignment.start, crossAxisAlignment: CrossAxisAlignment.start,
children: [ children: [
if (_responsiveUtils.isWebDesktop(context)) if (_responsiveUtils.isWebDesktop(context))
...[ ...[
Text(AppLocalizations.of(context).vacation, Text(
AppLocalizations.of(context).vacation,
style: const TextStyle( style: const TextStyle(
fontSize: 20, fontSize: 20,
fontWeight: FontWeight.w500, fontWeight: FontWeight.w500,
color: Colors.black)), color: Colors.black
)
),
const SizedBox(height: 8) const SizedBox(height: 8)
], ],
Text(AppLocalizations.of(context).vacationSettingExplanation, Text(
AppLocalizations.of(context).vacationSettingExplanation,
style: const TextStyle( style: const TextStyle(
fontSize: 16, fontSize: 16,
fontWeight: FontWeight.normal, fontWeight: FontWeight.normal,
color: AppColor.colorVacationSettingExplanation)), color: AppColor.colorVacationSettingExplanation
)
),
const SizedBox(height: 24), const SizedBox(height: 24),
Row(children: [ Row(children: [
Obx(() { Obx(() {
@@ -89,21 +92,22 @@ class VacationView extends GetWidget<VacationController> with RichTextButtonMixi
controller.updateVacationPresentation(newStatus: newStatus); controller.updateVacationPresentation(newStatus: newStatus);
}, },
child: SvgPicture.asset( child: SvgPicture.asset(
controller.isVacationDeactivated controller.isVacationDeactivated ? _imagePaths.icSwitchOff : _imagePaths.icSwitchOn,
? _imagePaths.icSwitchOff
: _imagePaths.icSwitchOn,
fit: BoxFit.fill, fit: BoxFit.fill,
width: 24, width: 24,
height: 24) height: 24
)
); );
}), }),
const SizedBox(width: 16), const SizedBox(width: 16),
Expanded( Expanded(
child: Text(AppLocalizations.of(context).vacationSettingToggleButtonAutoReply, child: Text(
AppLocalizations.of(context).vacationSettingToggleButtonAutoReply,
style: const TextStyle( style: const TextStyle(
fontSize: 16, fontSize: 16,
fontWeight: FontWeight.normal, fontWeight: FontWeight.normal,
color: Colors.black) color: Colors.black
)
), ),
) )
]), ]),
@@ -122,22 +126,18 @@ class VacationView extends GetWidget<VacationController> with RichTextButtonMixi
value: controller.vacationPresentation.value.startDate, value: controller.vacationPresentation.value.startDate,
mouseCursor: SystemMouseCursors.text, mouseCursor: SystemMouseCursors.text,
backgroundColor: AppColor.colorBackgroundVacationSettingField, backgroundColor: AppColor.colorBackgroundVacationSettingField,
isEmpty: !controller.isVacationDeactivated && isEmpty: !controller.isVacationDeactivated && controller.vacationPresentation.value.startDateIsNull,
controller.vacationPresentation.value.startDateIsNull,
hintText: AppLocalizations.of(context).startDate, hintText: AppLocalizations.of(context).startDate,
tapActionCallback: (value) => tapActionCallback: (value) => controller.selectDate(context, DateType.start, value)),
controller.selectDate(context, DateType.start, value)),
const SizedBox(height: 18), const SizedBox(height: 18),
BorderButtonField<TimeOfDay>( BorderButtonField<TimeOfDay>(
label: AppLocalizations.of(context).startTime, label: AppLocalizations.of(context).startTime,
value: controller.vacationPresentation.value.startTime, value: controller.vacationPresentation.value.startTime,
mouseCursor: SystemMouseCursors.text, mouseCursor: SystemMouseCursors.text,
backgroundColor: AppColor.colorBackgroundVacationSettingField, backgroundColor: AppColor.colorBackgroundVacationSettingField,
isEmpty: !controller.isVacationDeactivated && isEmpty: !controller.isVacationDeactivated && controller.vacationPresentation.value.starTimeIsNull,
controller.vacationPresentation.value.starTimeIsNull,
hintText: AppLocalizations.of(context).noStartTime, hintText: AppLocalizations.of(context).noStartTime,
tapActionCallback: (value) => tapActionCallback: (value) => controller.selectTime(context, DateType.start, value)),
controller.selectTime(context, DateType.start, value)),
]) ])
: Row(children: [ : Row(children: [
Expanded(child: BorderButtonField<DateTime>( Expanded(child: BorderButtonField<DateTime>(
@@ -145,22 +145,18 @@ class VacationView extends GetWidget<VacationController> with RichTextButtonMixi
value: controller.vacationPresentation.value.startDate, value: controller.vacationPresentation.value.startDate,
mouseCursor: SystemMouseCursors.text, mouseCursor: SystemMouseCursors.text,
backgroundColor: AppColor.colorBackgroundVacationSettingField, backgroundColor: AppColor.colorBackgroundVacationSettingField,
isEmpty: !controller.isVacationDeactivated && isEmpty: !controller.isVacationDeactivated && controller.vacationPresentation.value.startDateIsNull,
controller.vacationPresentation.value.startDateIsNull,
hintText: AppLocalizations.of(context).startDate, hintText: AppLocalizations.of(context).startDate,
tapActionCallback: (value) => tapActionCallback: (value) => controller.selectDate(context, DateType.start, value))),
controller.selectDate(context, DateType.start, value))),
const SizedBox(width: 24), const SizedBox(width: 24),
Expanded(child: BorderButtonField<TimeOfDay>( Expanded(child: BorderButtonField<TimeOfDay>(
label: AppLocalizations.of(context).startTime, label: AppLocalizations.of(context).startTime,
value: controller.vacationPresentation.value.startTime, value: controller.vacationPresentation.value.startTime,
mouseCursor: SystemMouseCursors.text, mouseCursor: SystemMouseCursors.text,
backgroundColor: AppColor.colorBackgroundVacationSettingField, backgroundColor: AppColor.colorBackgroundVacationSettingField,
isEmpty: !controller.isVacationDeactivated && isEmpty: !controller.isVacationDeactivated && controller.vacationPresentation.value.starTimeIsNull,
controller.vacationPresentation.value.starTimeIsNull,
hintText: AppLocalizations.of(context).noStartTime, hintText: AppLocalizations.of(context).noStartTime,
tapActionCallback: (value) => tapActionCallback: (value) => controller.selectTime(context, DateType.start, value))),
controller.selectTime(context, DateType.start, value))),
]), ]),
), ),
)), )),
@@ -181,16 +177,18 @@ class VacationView extends GetWidget<VacationController> with RichTextButtonMixi
: _imagePaths.icSwitchOff, : _imagePaths.icSwitchOff,
fit: BoxFit.fill, fit: BoxFit.fill,
width: 24, width: 24,
height: 24) height: 24
) )
), )),
const SizedBox(width: 16), const SizedBox(width: 16),
Expanded( Expanded(
child: Text(AppLocalizations.of(context).vacationStopsAt, child: Text(
AppLocalizations.of(context).vacationStopsAt,
style: const TextStyle( style: const TextStyle(
fontSize: 16, fontSize: 16,
fontWeight: FontWeight.normal, fontWeight: FontWeight.normal,
color: Colors.black) color: Colors.black
)
), ),
) )
]), ]),
@@ -208,22 +206,18 @@ class VacationView extends GetWidget<VacationController> with RichTextButtonMixi
value: controller.vacationPresentation.value.endDate, value: controller.vacationPresentation.value.endDate,
mouseCursor: SystemMouseCursors.text, mouseCursor: SystemMouseCursors.text,
backgroundColor: AppColor.colorBackgroundVacationSettingField, backgroundColor: AppColor.colorBackgroundVacationSettingField,
isEmpty: controller.canChangeEndDate && isEmpty: controller.canChangeEndDate && controller.vacationPresentation.value.endDateIsNull,
controller.vacationPresentation.value.endDateIsNull,
hintText: AppLocalizations.of(context).noEndDate, hintText: AppLocalizations.of(context).noEndDate,
tapActionCallback: (value) => tapActionCallback: (value) => controller.selectDate(context, DateType.end, value)),
controller.selectDate(context, DateType.end, value)),
const SizedBox(height: 18), const SizedBox(height: 18),
BorderButtonField<TimeOfDay>( BorderButtonField<TimeOfDay>(
label: AppLocalizations.of(context).endTime, label: AppLocalizations.of(context).endTime,
value: controller.vacationPresentation.value.endTime, value: controller.vacationPresentation.value.endTime,
mouseCursor: SystemMouseCursors.text, mouseCursor: SystemMouseCursors.text,
backgroundColor: AppColor.colorBackgroundVacationSettingField, backgroundColor: AppColor.colorBackgroundVacationSettingField,
isEmpty: controller.canChangeEndDate && isEmpty: controller.canChangeEndDate && controller.vacationPresentation.value.endTimeIsNull,
controller.vacationPresentation.value.endTimeIsNull,
hintText: AppLocalizations.of(context).noEndTime, hintText: AppLocalizations.of(context).noEndTime,
tapActionCallback: (value) => tapActionCallback: (value) => controller.selectTime(context, DateType.end, value)),
controller.selectTime(context, DateType.end, value)),
]) ])
: Row(children: [ : Row(children: [
Expanded(child: BorderButtonField<DateTime>( Expanded(child: BorderButtonField<DateTime>(
@@ -231,22 +225,18 @@ class VacationView extends GetWidget<VacationController> with RichTextButtonMixi
value: controller.vacationPresentation.value.endDate, value: controller.vacationPresentation.value.endDate,
mouseCursor: SystemMouseCursors.text, mouseCursor: SystemMouseCursors.text,
backgroundColor: AppColor.colorBackgroundVacationSettingField, backgroundColor: AppColor.colorBackgroundVacationSettingField,
isEmpty: controller.canChangeEndDate && isEmpty: controller.canChangeEndDate && controller.vacationPresentation.value.endDateIsNull,
controller.vacationPresentation.value.endDateIsNull,
hintText: AppLocalizations.of(context).noEndDate, hintText: AppLocalizations.of(context).noEndDate,
tapActionCallback: (value) => tapActionCallback: (value) => controller.selectDate(context, DateType.end, value))),
controller.selectDate(context, DateType.end, value))),
const SizedBox(width: 24), const SizedBox(width: 24),
Expanded(child: BorderButtonField<TimeOfDay>( Expanded(child: BorderButtonField<TimeOfDay>(
label: AppLocalizations.of(context).endTime, label: AppLocalizations.of(context).endTime,
value: controller.vacationPresentation.value.endTime, value: controller.vacationPresentation.value.endTime,
mouseCursor: SystemMouseCursors.text, mouseCursor: SystemMouseCursors.text,
backgroundColor: AppColor.colorBackgroundVacationSettingField, backgroundColor: AppColor.colorBackgroundVacationSettingField,
isEmpty: controller.canChangeEndDate && isEmpty: controller.canChangeEndDate && controller.vacationPresentation.value.endTimeIsNull,
controller.vacationPresentation.value.endTimeIsNull,
hintText: AppLocalizations.of(context).noEndTime, hintText: AppLocalizations.of(context).noEndTime,
tapActionCallback: (value) => tapActionCallback: (value) => controller.selectTime(context, DateType.end, value))),
controller.selectTime(context, DateType.end, value))),
]), ]),
) )
)), )),
@@ -259,7 +249,8 @@ class VacationView extends GetWidget<VacationController> with RichTextButtonMixi
child: TextInputFieldBuilder( child: TextInputFieldBuilder(
label: AppLocalizations.of(context).subject, label: AppLocalizations.of(context).subject,
hint: AppLocalizations.of(context).hintSubjectInputVacationSetting, hint: AppLocalizations.of(context).hintSubjectInputVacationSetting,
editingController: controller.subjectTextController), editingController: controller.subjectTextController
),
) )
: Row(children: [ : Row(children: [
Expanded(child: Opacity( Expanded(child: Opacity(
@@ -267,7 +258,8 @@ class VacationView extends GetWidget<VacationController> with RichTextButtonMixi
child: TextInputFieldBuilder( child: TextInputFieldBuilder(
label: AppLocalizations.of(context).subject, label: AppLocalizations.of(context).subject,
hint: AppLocalizations.of(context).hintSubjectInputVacationSetting, hint: AppLocalizations.of(context).hintSubjectInputVacationSetting,
editingController: controller.subjectTextController), editingController: controller.subjectTextController
),
)), )),
const SizedBox(width: 24), const SizedBox(width: 24),
const Expanded(child: SizedBox.shrink()) const Expanded(child: SizedBox.shrink())
@@ -289,8 +281,6 @@ class VacationView extends GetWidget<VacationController> with RichTextButtonMixi
), ),
), ),
), ),
),
),
); );
} }