Fix advanced search form

Signed-off-by: dab246 <tdvu@linagora.com>
(cherry picked from commit 59aee3f5023dc9722bd6f4f74abb19ea6bf39980)
This commit is contained in:
dab246
2023-12-06 09:27:59 +07:00
committed by Dat H. Pham
parent f18c4ef122
commit 5bb4249329
7 changed files with 19 additions and 23 deletions
@@ -1,13 +1,12 @@
import 'dart:async'; import 'dart:async';
import 'dart:math';
import 'dart:io'; import 'dart:io';
import 'dart:math';
import 'package:core/presentation/extensions/color_extension.dart'; import 'package:core/presentation/extensions/color_extension.dart';
import 'package:core/utils/app_logger.dart'; import 'package:core/utils/app_logger.dart';
import 'package:core/utils/direction_utils.dart'; import 'package:core/utils/direction_utils.dart';
import 'package:flutter/foundation.dart'; import 'package:flutter/foundation.dart';
import 'package:flutter/material.dart'; import 'package:flutter/material.dart';
import 'package:flutter/services.dart'; import 'package:flutter/services.dart';
import 'package:flutter_keyboard_visibility/flutter_keyboard_visibility.dart'; import 'package:flutter_keyboard_visibility/flutter_keyboard_visibility.dart';
@@ -1250,7 +1249,7 @@ class _SuggestionsListState<T, P, R> extends State<_SuggestionsList<T, P, R>>
final listItemContactWidget = _contacts?.map((P contact) { final listItemContactWidget = _contacts?.map((P contact) {
if (widget.contactSuggestionBuilder != null) { if (widget.contactSuggestionBuilder != null) {
return Material( return Material(
color: Colors.transparent, type: MaterialType.transparency,
child: InkWell( child: InkWell(
child: widget.contactSuggestionBuilder!(context, contact), child: widget.contactSuggestionBuilder!(context, contact),
onTap: () => widget.onContactSuggestionSelected?.call(contact), onTap: () => widget.onContactSuggestionSelected?.call(contact),
@@ -2,12 +2,12 @@ import 'package:core/presentation/extensions/color_extension.dart';
import 'package:flutter/material.dart'; import 'package:flutter/material.dart';
class AutoCompleteTagItemWebStyle { class AutoCompleteTagItemWebStyle {
static const double paddingTop = 4.5; static const double paddingTop = 8;
static const double paddingEnd = 40.0; static const double paddingEnd = 40.0;
static const double labelPaddingHorizontal = 4.0; static const double labelPaddingHorizontal = 4.0;
static const EdgeInsetsGeometry collapsedPadding = EdgeInsetsDirectional.symmetric(vertical: 5, horizontal: 8); static const EdgeInsetsGeometry collapsedPadding = EdgeInsetsDirectional.symmetric(vertical: 4, horizontal: 8);
static const EdgeInsetsGeometry marginCollapsed = EdgeInsets.only(top: 5.5); static const EdgeInsetsGeometry marginCollapsed = EdgeInsets.only(top: 8);
static const BorderRadius shapeBorderRadius = BorderRadius.all(Radius.circular(10.0)); static const BorderRadius shapeBorderRadius = BorderRadius.all(Radius.circular(10.0));
@@ -28,6 +28,7 @@ class TextFieldAutoCompleteEmailAddressWebStyles {
static const Color focusedBorderColor = AppColor.primaryColor; static const Color focusedBorderColor = AppColor.primaryColor;
static const Color enableBorderColor = AppColor.colorInputBorderCreateMailbox; static const Color enableBorderColor = AppColor.colorInputBorderCreateMailbox;
static const Color suggestionBoxBackgroundColor = Colors.white; static const Color suggestionBoxBackgroundColor = Colors.white;
static const Color cursorColor = AppColor.primaryColor;
static const TextStyle fieldTitleTextStyle = TextStyle( static const TextStyle fieldTitleTextStyle = TextStyle(
color: AppColor.colorContentEmail, color: AppColor.colorContentEmail,
@@ -1,5 +1,4 @@
import 'package:core/presentation/extensions/color_extension.dart'; import 'package:core/presentation/extensions/color_extension.dart';
import 'package:core/presentation/utils/responsive_utils.dart';
import 'package:flutter/material.dart'; import 'package:flutter/material.dart';
import 'package:get/get.dart'; import 'package:get/get.dart';
import 'package:pointer_interceptor/pointer_interceptor.dart'; import 'package:pointer_interceptor/pointer_interceptor.dart';
@@ -11,14 +10,12 @@ class AdvancedSearchFilterOverlay extends StatelessWidget {
@override @override
Widget build(BuildContext context) { Widget build(BuildContext context) {
final responsiveUtils = Get.find<ResponsiveUtils>();
return PointerInterceptor( return PointerInterceptor(
child: GestureDetector( child: GestureDetector(
onTap: () => FocusManager.instance.primaryFocus?.unfocus(), onTap: () => FocusManager.instance.primaryFocus?.unfocus(),
child: Container( child: Container(
constraints: BoxConstraints( constraints: BoxConstraints(
maxHeight: _getHeightOverlay(context, responsiveUtils), maxHeight: _getHeightOverlay(context),
), ),
margin: const EdgeInsetsDirectional.only(top: 4, bottom: 16, end: 22), margin: const EdgeInsetsDirectional.only(top: 4, bottom: 16, end: 22),
padding: const EdgeInsets.symmetric(horizontal: 8), padding: const EdgeInsets.symmetric(horizontal: 8),
@@ -45,10 +42,10 @@ class AdvancedSearchFilterOverlay extends StatelessWidget {
); );
} }
double _getHeightOverlay(BuildContext context, ResponsiveUtils responsiveUtils) { double _getHeightOverlay(BuildContext context) {
const double maxHeightTopBar = 80; const double maxHeightTopBar = 80;
const double paddingBottom = 16; const double paddingBottom = 16;
final currentHeight = responsiveUtils.getSizeScreenHeight(context); final currentHeight = context.height;
double maxHeightForm = currentHeight - maxHeightTopBar - paddingBottom; double maxHeightForm = currentHeight - maxHeightTopBar - paddingBottom;
return maxHeightForm; return maxHeightForm;
} }
@@ -70,6 +70,7 @@ class AutoCompleteTagItemWidgetWeb extends StatelessWidget {
_imagePaths.icClose, _imagePaths.icClose,
fit: BoxFit.fill, fit: BoxFit.fill,
), ),
padding: EdgeInsets.zero,
labelStyle: AutoCompleteTagItemWebStyle.labelTextStyle, labelStyle: AutoCompleteTagItemWebStyle.labelTextStyle,
backgroundColor: _getTagBackgroundColor(), backgroundColor: _getTagBackgroundColor(),
shape: RoundedRectangleBorder( shape: RoundedRectangleBorder(
@@ -111,7 +112,7 @@ class AutoCompleteTagItemWidgetWeb extends StatelessWidget {
if (isLatestTagFocused && isLatestEmail) { if (isLatestTagFocused && isLatestEmail) {
return const BorderSide(width: 1, color: AppColor.primaryColor); return const BorderSide(width: 1, color: AppColor.primaryColor);
} else { } else {
return BorderSide.none; return const BorderSide(width: 0, color: AppColor.colorEmailAddressTag);
} }
} }
} }
@@ -1,5 +1,6 @@
import 'dart:async'; import 'dart:async';
import 'dart:math'; import 'dart:math';
import 'package:collection/collection.dart'; import 'package:collection/collection.dart';
import 'package:core/presentation/extensions/color_extension.dart'; import 'package:core/presentation/extensions/color_extension.dart';
import 'package:core/presentation/utils/responsive_utils.dart'; import 'package:core/presentation/utils/responsive_utils.dart';
@@ -111,6 +112,7 @@ class _TextFieldAutocompleteEmailAddressWebState extends State<TextFieldAutocomp
focusNodeKeyboard: widget.focusNode, focusNodeKeyboard: widget.focusNode,
keyboardType: TextInputType.emailAddress, keyboardType: TextInputType.emailAddress,
textInputAction: TextInputAction.done, textInputAction: TextInputAction.done,
cursorColor: TextFieldAutoCompleteEmailAddressWebStyles.cursorColor,
debounceDuration: TextFieldAutoCompleteEmailAddressWebStyles.debounceDuration, debounceDuration: TextFieldAutoCompleteEmailAddressWebStyles.debounceDuration,
inputDecoration: InputDecoration( inputDecoration: InputDecoration(
filled: true, filled: true,
@@ -16,6 +16,7 @@ import 'package:tmail_ui_user/features/base/mixin/app_loader_mixin.dart';
import 'package:tmail_ui_user/features/mailbox_dashboard/domain/model/recent_search.dart'; import 'package:tmail_ui_user/features/mailbox_dashboard/domain/model/recent_search.dart';
import 'package:tmail_ui_user/features/mailbox_dashboard/presentation/action/dashboard_action.dart'; import 'package:tmail_ui_user/features/mailbox_dashboard/presentation/action/dashboard_action.dart';
import 'package:tmail_ui_user/features/mailbox_dashboard/presentation/controller/mailbox_dashboard_controller.dart'; import 'package:tmail_ui_user/features/mailbox_dashboard/presentation/controller/mailbox_dashboard_controller.dart';
import 'package:tmail_ui_user/features/mailbox_dashboard/presentation/controller/search_controller.dart' as search;
import 'package:tmail_ui_user/features/mailbox_dashboard/presentation/model/search/quick_search_filter.dart'; import 'package:tmail_ui_user/features/mailbox_dashboard/presentation/model/search/quick_search_filter.dart';
import 'package:tmail_ui_user/features/mailbox_dashboard/presentation/widgets/advanced_search/advanced_search_filter_overlay.dart'; import 'package:tmail_ui_user/features/mailbox_dashboard/presentation/widgets/advanced_search/advanced_search_filter_overlay.dart';
import 'package:tmail_ui_user/features/mailbox_dashboard/presentation/widgets/advanced_search/icon_open_advanced_search_widget.dart'; import 'package:tmail_ui_user/features/mailbox_dashboard/presentation/widgets/advanced_search/icon_open_advanced_search_widget.dart';
@@ -23,8 +24,6 @@ import 'package:tmail_ui_user/features/mailbox_dashboard/presentation/widgets/qu
import 'package:tmail_ui_user/features/mailbox_dashboard/presentation/widgets/quick_search/email_quick_search_item_tile_widget.dart'; import 'package:tmail_ui_user/features/mailbox_dashboard/presentation/widgets/quick_search/email_quick_search_item_tile_widget.dart';
import 'package:tmail_ui_user/features/mailbox_dashboard/presentation/widgets/quick_search/recent_search_item_tile_widget.dart'; import 'package:tmail_ui_user/features/mailbox_dashboard/presentation/widgets/quick_search/recent_search_item_tile_widget.dart';
import 'package:tmail_ui_user/main/localizations/app_localizations.dart'; import 'package:tmail_ui_user/main/localizations/app_localizations.dart';
import 'package:tmail_ui_user/main/utils/app_utils.dart';
import 'package:tmail_ui_user/features/mailbox_dashboard/presentation/controller/search_controller.dart' as search;
class SearchInputFormWidget extends StatelessWidget with AppLoaderMixin { class SearchInputFormWidget extends StatelessWidget with AppLoaderMixin {
final _searchController = Get.find<search.SearchController>(); final _searchController = Get.find<search.SearchController>();
@@ -184,6 +183,7 @@ class SearchInputFormWidget extends StatelessWidget with AppLoaderMixin {
controller: _searchController.searchInputController, controller: _searchController.searchInputController,
focusNode: _searchController.searchFocus, focusNode: _searchController.searchFocus,
textInputAction: TextInputAction.done, textInputAction: TextInputAction.done,
cursorColor: AppColor.primaryColor,
textDirection: DirectionUtils.getDirectionByLanguage(context), textDirection: DirectionUtils.getDirectionByLanguage(context),
onSubmitted: (keyword) => _invokeSearchEmailAction(context, keyword.trim()), onSubmitted: (keyword) => _invokeSearchEmailAction(context, keyword.trim()),
decoration: InputDecoration( decoration: InputDecoration(
@@ -196,10 +196,7 @@ class SearchInputFormWidget extends StatelessWidget with AppLoaderMixin {
labelStyle: const TextStyle(color: Colors.black, fontSize: 16.0) labelStyle: const TextStyle(color: Colors.black, fontSize: 16.0)
), ),
leftButton: Padding( leftButton: Padding(
padding: EdgeInsets.only( padding: const EdgeInsetsDirectional.only(start: 8),
left: AppUtils.isDirectionRTL(context) ? 0 : 8,
right: AppUtils.isDirectionRTL(context) ? 8 : 0
),
child: buildIconWeb( child: buildIconWeb(
minSize: 40, minSize: 40,
iconPadding: EdgeInsets.zero, iconPadding: EdgeInsets.zero,
@@ -225,11 +222,10 @@ class SearchInputFormWidget extends StatelessWidget with AppLoaderMixin {
final isFilterSelected = filter.isApplied(_searchController.listFilterOnSuggestionForm); final isFilterSelected = filter.isApplied(_searchController.listFilterOnSuggestionForm);
return Chip( return Chip(
labelPadding: EdgeInsets.only( labelPadding: const EdgeInsetsDirectional.only(
top: 2, top: 2,
bottom: 2, bottom: 2,
right: AppUtils.isDirectionRTL(context) ? 0 : 10, end: 10,
left: AppUtils.isDirectionRTL(context) ? 10 : 0,
), ),
label: Text( label: Text(
filter.getName(context), filter.getName(context),
@@ -246,7 +242,7 @@ class SearchInputFormWidget extends StatelessWidget with AppLoaderMixin {
labelStyle: filter.getTextStyle(isFilterSelected: isFilterSelected), labelStyle: filter.getTextStyle(isFilterSelected: isFilterSelected),
backgroundColor: filter.getBackgroundColor(isFilterSelected: isFilterSelected), backgroundColor: filter.getBackgroundColor(isFilterSelected: isFilterSelected),
shape: RoundedRectangleBorder( shape: RoundedRectangleBorder(
borderRadius: BorderRadius.circular(10), borderRadius: const BorderRadius.all(Radius.circular(10)),
side: BorderSide(color: filter.getBackgroundColor(isFilterSelected: isFilterSelected)), side: BorderSide(color: filter.getBackgroundColor(isFilterSelected: isFilterSelected)),
), ),
); );