TF-682 Update padding advanced search form on landscape tablet

This commit is contained in:
dab246
2022-07-04 11:50:48 +07:00
committed by Dat H. Pham
parent 93177d042d
commit be625472c6
10 changed files with 124 additions and 68 deletions
@@ -124,4 +124,12 @@ class ResponsiveUtils {
return isLandscapeTablet(context) || isDesktop(context);
}
}
bool landscapeTabletSupported(BuildContext context) {
if (BuildUtils.isWeb) {
return isTabletLarge(context);
} else {
return isLandscapeTablet(context);
}
}
}
@@ -94,7 +94,6 @@ class AdvancedFilterController extends GetxController {
}
if(lastTextForm.isNotEmpty && !searchController.searchEmailFilter.value.from.contains(lastTextForm.value)){
print(lastTextForm);
searchController.updateFilterEmail(
from: searchController.searchEmailFilter.value.from..add(lastTextForm.value),
);
@@ -108,7 +107,6 @@ class AdvancedFilterController extends GetxController {
);
lastTextTo.value = '';
}
searchController.updateFilterEmail(
@@ -281,7 +281,6 @@ class MailboxDashBoardController extends ReloadableController {
bool get isDrawerOpen => scaffoldKey.currentState?.isDrawerOpen == true;
bool isSelectionEnabled() => currentSelectMode.value == SelectMode.ACTIVE;
void searchEmail(BuildContext context, String value) {
@@ -436,7 +436,7 @@ class MailboxDashBoardView extends BaseMailboxDashBoardView {
widthFactor: 1,
),
),
portalFollower:const AdvancedSearchFilterOverlay(),
portalFollower: const AdvancedSearchFilterOverlay(),
child: QuickSearchInputForm<PresentationEmail, RecentSearch>(
textFieldConfiguration: QuickSearchTextFieldConfiguration(
controller: searchController.searchInputController,
@@ -121,7 +121,8 @@ class AdvancedSearchInputForm extends GetWidget<AdvancedFilterController>
}) {
final child = [
SizedBox(
width: _responsiveUtils.isMobile(context) ? null : 112,
width: _responsiveUtils.isMobile(context) || _responsiveUtils.landscapeTabletSupported(context)
? null : 112,
child: Text(
advancedSearchFilterField.getTitle(context),
style: const TextStyle(
@@ -131,27 +132,39 @@ class AdvancedSearchInputForm extends GetWidget<AdvancedFilterController>
),
),
const Padding(padding: EdgeInsets.all(4)),
_responsiveUtils.isMobile(context)
? _buildTextField(
isSelectFormList: isSelectFormList,
onTap: onTap,
context: context,
advancedSearchFilterField: advancedSearchFilterField,
textEditingController: textEditingController,
)
: Expanded(
child: _buildTextFieldFilterForWeb(
isSelectFormList: isSelectFormList,
onTap: onTap,
context: context,
advancedSearchFilterField: advancedSearchFilterField,
textEditingController: textEditingController,
),
)
if (_responsiveUtils.isMobile(context))
_buildTextField(
isSelectFormList: isSelectFormList,
onTap: onTap,
context: context,
advancedSearchFilterField: advancedSearchFilterField,
textEditingController: textEditingController,
)
else if (_responsiveUtils.landscapeTabletSupported(context))
if (advancedSearchFilterField == AdvancedSearchFilterField.date)
const DateDropDownButton()
else
_buildTextField(
isSelectFormList: isSelectFormList,
onTap: onTap,
context: context,
advancedSearchFilterField: advancedSearchFilterField,
textEditingController: textEditingController,
)
else
Expanded(
child: _buildTextFieldFilterForWeb(
isSelectFormList: isSelectFormList,
onTap: onTap,
context: context,
advancedSearchFilterField: advancedSearchFilterField,
textEditingController: textEditingController,
),
)
];
return Padding(
padding: const EdgeInsets.symmetric(vertical: 8),
child: _responsiveUtils.isMobile(context)
child: _responsiveUtils.isMobile(context) || _responsiveUtils.landscapeTabletSupported(context)
? Column(
mainAxisAlignment: MainAxisAlignment.start,
crossAxisAlignment: CrossAxisAlignment.start,
@@ -191,7 +204,8 @@ class AdvancedSearchInputForm extends GetWidget<AdvancedFilterController>
}) {
final child = [
SizedBox(
width: _responsiveUtils.isMobile(context) ? null : 112,
width: _responsiveUtils.isMobile(context) || _responsiveUtils.landscapeTabletSupported(context)
? null : 112,
child: Text(
advancedSearchFilterField.getTitle(context),
style: const TextStyle(
@@ -201,7 +215,7 @@ class AdvancedSearchInputForm extends GetWidget<AdvancedFilterController>
),
),
const Padding(padding: EdgeInsets.all(4)),
_responsiveUtils.isMobile(context)
_responsiveUtils.isMobile(context) || _responsiveUtils.landscapeTabletSupported(context)
? TextFieldAutoCompleteEmailAddress(
optionsBuilder: (word) async {
return controller.getAutoCompleteSuggestion(word: word);
@@ -274,7 +288,7 @@ class AdvancedSearchInputForm extends GetWidget<AdvancedFilterController>
];
return Padding(
padding: const EdgeInsets.symmetric(vertical: 8),
child: _responsiveUtils.isMobile(context)
child: _responsiveUtils.isMobile(context) || _responsiveUtils.landscapeTabletSupported(context)
? Column(
mainAxisAlignment: MainAxisAlignment.start,
crossAxisAlignment: CrossAxisAlignment.start,
@@ -16,24 +16,25 @@ class AdvancedSearchFilterFormBottomView
final ResponsiveUtils _responsiveUtils = Get.find<ResponsiveUtils>();
return Padding(
padding:
EdgeInsets.only(top: _responsiveUtils.isMobile(context) ? 8 : 20),
padding: EdgeInsets.only(
top: _responsiveUtils.isMobile(context) ||
_responsiveUtils.landscapeTabletSupported(context) ? 8 : 20),
child: Column(
crossAxisAlignment: CrossAxisAlignment.start,
children: [
if (_responsiveUtils.isMobile(context))
_buildCheckboxHasAttachment(context),
if (_responsiveUtils.isMobile(context) || _responsiveUtils.landscapeTabletSupported(context))
...[
_buildCheckboxHasAttachment(context),
const SizedBox(height: 24)
],
Row(
mainAxisAlignment: _responsiveUtils.isMobile(context)
mainAxisAlignment: _responsiveUtils.isMobile(context) || _responsiveUtils.landscapeTabletSupported(context)
? MainAxisAlignment.spaceEvenly
: MainAxisAlignment.end,
crossAxisAlignment: CrossAxisAlignment.end,
mainAxisSize: MainAxisSize.max,
: MainAxisAlignment.center,
crossAxisAlignment: CrossAxisAlignment.center,
children: [
if (!_responsiveUtils.isMobile(context))...[
_buildCheckboxHasAttachment(context),
const Spacer(),
],
if (!_responsiveUtils.isMobile(context) && !_responsiveUtils.landscapeTabletSupported(context))
Expanded(child: _buildCheckboxHasAttachment(context)),
..._buildListButton(context, _responsiveUtils),
],
),
@@ -44,7 +45,7 @@ class AdvancedSearchFilterFormBottomView
List<Widget> _buildListButton(
BuildContext context, ResponsiveUtils responsiveUtils) {
if (responsiveUtils.isMobile(context)) {
if (responsiveUtils.isMobile(context) || responsiveUtils.landscapeTabletSupported(context)) {
return [
Expanded(
child: _buildButton(
@@ -130,16 +131,14 @@ class AdvancedSearchFilterFormBottomView
}) {
return InkWell(
onTap: onAction,
onTapDown: (_) {
onAction.call();
},
child: Container(
height: 44,
padding: EdgeInsets.symmetric(
horizontal: responsiveUtils.isMobile(context) ? 0 : 26),
horizontal: responsiveUtils.isMobile(context) || responsiveUtils.landscapeTabletSupported(context)
? 0 : 26),
constraints: BoxConstraints(
maxWidth:
responsiveUtils.isMobile(context) ? double.infinity : 144),
maxWidth: responsiveUtils.isMobile(context) || responsiveUtils.landscapeTabletSupported(context)
? double.infinity : 144),
alignment: Alignment.center,
decoration: BoxDecoration(
borderRadius: BorderRadius.circular(10), color: colorButton),
@@ -1,22 +1,30 @@
import 'package:core/presentation/extensions/color_extension.dart';
import 'package:core/presentation/utils/responsive_utils.dart';
import 'package:core/utils/app_logger.dart';
import 'package:flutter/material.dart';
import 'package:get/get.dart';
import 'package:tmail_ui_user/features/mailbox_dashboard/presentation/widgets/advanced_search/advanced_search_filter_form.dart';
class AdvancedSearchFilterOverlay extends StatelessWidget {
const AdvancedSearchFilterOverlay({Key? key}) : super(key: key);
@override
Widget build(BuildContext context) {
final responsiveUtils = Get.find<ResponsiveUtils>();
return Padding(
padding: const EdgeInsets.only(top: 8),
padding: const EdgeInsets.only(top: 8, bottom: 16),
child: Container(
constraints: const BoxConstraints(
constraints: BoxConstraints(
minWidth: 660,
maxHeight: 568,
maxHeight: _getHeightOverlay(context, responsiveUtils),
),
width: 660,
height: MediaQuery.of(context).size.height,
padding: const EdgeInsets.all(32),
height: _getHeightOverlay(context, responsiveUtils),
padding: responsiveUtils.landscapeTabletSupported(context)
? EdgeInsets.zero
: const EdgeInsets.all(24),
decoration: BoxDecoration(
color: Colors.white,
borderRadius: BorderRadius.circular(16),
@@ -29,11 +37,31 @@ class AdvancedSearchFilterOverlay extends StatelessWidget {
]),
child: SingleChildScrollView(
child: Padding(
padding: const EdgeInsets.symmetric(horizontal: 28, vertical: 12),
padding: EdgeInsets.symmetric(
horizontal: responsiveUtils.landscapeTabletSupported(context)
? 16 : 28,
vertical: responsiveUtils.landscapeTabletSupported(context)
? 16 : 12),
child: AdvancedSearchInputForm(),
),
),
),
);
}
double _getHeightOverlay(BuildContext context, ResponsiveUtils responsiveUtils) {
const double maxHeightTopBar = 160;
const double maxHeightOverlay = 568;
final currentHeight = responsiveUtils.getSizeScreenHeight(context);
double maxHeightForm = maxHeightOverlay;
if (currentHeight < maxHeightOverlay) {
maxHeightForm = currentHeight > maxHeightTopBar
? currentHeight - maxHeightTopBar
: currentHeight;
}
log('AdvancedSearchFilterOverlay::_getHeightOverlay(): maxHeightForm: $maxHeightForm');
return maxHeightForm;
}
}
@@ -21,21 +21,25 @@ class IconOpenAdvancedSearchWidget extends StatelessWidget {
@override
Widget build(BuildContext context) {
return Obx(
() => buildIconWeb(
minSize: 0,
iconPadding: const EdgeInsets.only(right: 8),
icon: SvgPicture.asset(_imagePaths.icFilterAdvanced,
color: searchController.isAdvancedSearchViewOpen.isTrue || searchController.isAdvancedSearchHasApply.isTrue
? AppColor.colorFilterMessageEnabled
: AppColor.colorFilterMessageDisabled,
width: 16,
height: 16),
onTap: () {
if(searchController.isAdvancedSearchViewOpen.isFalse && searchController.isAdvancedSearchHasApply.isFalse){
advancedFilterController.initSearchFilterField(context);
}
searchController.showAdvancedFilterView(_parentContext);
}),
() => Padding(
padding: const EdgeInsets.only(right: 8),
child: buildIconWeb(
splashRadius: 15,
minSize: 40,
iconPadding: const EdgeInsets.only(right: 2),
icon: SvgPicture.asset(_imagePaths.icFilterAdvanced,
color: searchController.isAdvancedSearchViewOpen.isTrue || searchController.isAdvancedSearchHasApply.isTrue
? AppColor.colorFilterMessageEnabled
: AppColor.colorFilterMessageDisabled,
width: 16,
height: 16),
onTap: () {
if(searchController.isAdvancedSearchViewOpen.isFalse && searchController.isAdvancedSearchHasApply.isFalse){
advancedFilterController.initSearchFilterField(context);
}
searchController.showAdvancedFilterView(_parentContext);
}),
),
);
}
}
@@ -802,6 +802,9 @@ class ThreadController extends BaseController {
bool isSearchActive() => searchController.isSearchActive();
bool get isAllSearchInActive => !searchController.isSearchActive() &&
searchController.isAdvancedSearchViewOpen.isFalse;
void enableSearch(BuildContext context) {
searchController.enableSearch();
}
@@ -401,9 +401,12 @@ class ThreadView extends GetWidget<ThreadController> with AppLoaderMixin,
}
Widget _buildFloatingButtonCompose(BuildContext context) {
if (_responsiveUtils.isWebDesktop(context)) {
return const SizedBox.shrink();
}
return Obx(() {
if (!controller.isSearchActive()
&& (!BuildUtils.isWeb || (BuildUtils.isWeb && !_responsiveUtils.isDesktop(context)))) {
if (controller.isAllSearchInActive) {
return Container(
padding: BuildUtils.isWeb
? EdgeInsets.zero