TF-933 Update new position all button QuickSearchFilter on Web Desktop
This commit is contained in:
@@ -76,6 +76,14 @@ class DisableSearchEmailAction extends DashBoardAction {
|
||||
|
||||
DisableSearchEmailAction();
|
||||
|
||||
@override
|
||||
List<Object?> get props => [];
|
||||
}
|
||||
|
||||
class StartSearchEmailAction extends DashBoardAction {
|
||||
|
||||
StartSearchEmailAction();
|
||||
|
||||
@override
|
||||
List<Object?> get props => [];
|
||||
}
|
||||
+23
-2
@@ -43,6 +43,7 @@ import 'package:tmail_ui_user/features/mailbox_dashboard/presentation/controller
|
||||
import 'package:tmail_ui_user/features/mailbox_dashboard/presentation/controller/search_controller.dart';
|
||||
import 'package:tmail_ui_user/features/mailbox_dashboard/presentation/model/composer_overlay_state.dart';
|
||||
import 'package:tmail_ui_user/features/mailbox_dashboard/presentation/model/download/download_task_state.dart';
|
||||
import 'package:tmail_ui_user/features/mailbox_dashboard/presentation/model/search/email_receive_time_type.dart';
|
||||
import 'package:tmail_ui_user/features/mailbox_dashboard/presentation/model/search/quick_search_filter.dart';
|
||||
import 'package:tmail_ui_user/features/manage_account/domain/state/get_all_vacation_state.dart';
|
||||
import 'package:tmail_ui_user/features/manage_account/domain/state/update_vacation_state.dart';
|
||||
@@ -54,7 +55,6 @@ import 'package:tmail_ui_user/features/manage_account/presentation/model/account
|
||||
import 'package:tmail_ui_user/features/manage_account/presentation/model/manage_account_arguments.dart';
|
||||
import 'package:tmail_ui_user/features/thread/domain/model/filter_message_option.dart';
|
||||
import 'package:tmail_ui_user/features/thread/domain/model/search_query.dart';
|
||||
import 'package:tmail_ui_user/features/thread/domain/state/search_email_state.dart';
|
||||
import 'package:tmail_ui_user/main/localizations/app_localizations.dart';
|
||||
import 'package:tmail_ui_user/main/routes/app_routes.dart';
|
||||
import 'package:tmail_ui_user/main/routes/route_navigation.dart';
|
||||
@@ -366,7 +366,7 @@ class MailboxDashBoardController extends ReloadableController {
|
||||
|
||||
void searchEmail(BuildContext context, String value) {
|
||||
searchController.updateFilterEmail(text: SearchQuery(value));
|
||||
dispatchState(Right(SearchEmailNewQuery(searchController.searchEmailFilter.value.text ?? SearchQuery.initial())));
|
||||
dispatchAction(StartSearchEmailAction());
|
||||
FocusScope.of(context).unfocus();
|
||||
if (_searchInsideEmailDetailedViewIsActive(context)) {
|
||||
_closeEmailDetailedView();
|
||||
@@ -659,6 +659,27 @@ class MailboxDashBoardController extends ReloadableController {
|
||||
}
|
||||
}
|
||||
|
||||
void selectQuickSearchFilterAction(QuickSearchFilter filter) {
|
||||
selectQuickSearchFilter(quickSearchFilter: filter);
|
||||
dispatchAction(StartSearchEmailAction());
|
||||
}
|
||||
|
||||
void selectReceiveTimeQuickSearchFilter(EmailReceiveTimeType? emailReceiveTimeType) {
|
||||
popBack();
|
||||
|
||||
if (emailReceiveTimeType != null) {
|
||||
searchController.updateFilterEmail(emailReceiveTimeType: emailReceiveTimeType);
|
||||
} else {
|
||||
searchController.updateFilterEmail(emailReceiveTimeType: EmailReceiveTimeType.allTime);
|
||||
}
|
||||
searchController.setEmailReceiveTimeType(emailReceiveTimeType);
|
||||
searchController.updateFilterEmail();
|
||||
if (searchController.searchQuery == null){
|
||||
searchController.updateFilterEmail(text: SearchQuery.initial());
|
||||
}
|
||||
dispatchAction(StartSearchEmailAction());
|
||||
}
|
||||
|
||||
@override
|
||||
void onClose() {
|
||||
_emailReceiveManager.closeEmailReceiveManagerStream();
|
||||
|
||||
@@ -42,8 +42,11 @@ class SearchController extends BaseController {
|
||||
final mailboxFilterSelectedFormAdvancedSearch = Rxn<PresentationMailbox>();
|
||||
final hasAttachment = false.obs;
|
||||
final emailReceiveTimeType = Rxn<EmailReceiveTimeType>();
|
||||
final searchIsActive = RxBool(false);
|
||||
|
||||
get searchEmailFilterValue => searchEmailFilter.value;
|
||||
SearchEmailFilter get searchEmailFilterValue => searchEmailFilter.value;
|
||||
|
||||
SearchQuery? get searchQuery => searchEmailFilter.value.text;
|
||||
|
||||
FocusNode searchFocus = FocusNode();
|
||||
|
||||
|
||||
@@ -13,6 +13,7 @@ import 'package:tmail_ui_user/features/mailbox_dashboard/presentation/action/das
|
||||
import 'package:tmail_ui_user/features/mailbox_dashboard/presentation/base_mailbox_dashboard_view.dart';
|
||||
import 'package:tmail_ui_user/features/mailbox_dashboard/presentation/controller/search_controller.dart';
|
||||
import 'package:tmail_ui_user/features/mailbox_dashboard/presentation/model/composer_overlay_state.dart';
|
||||
import 'package:tmail_ui_user/features/mailbox_dashboard/presentation/model/search/email_receive_time_type.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/icon_open_advanced_search_widget.dart';
|
||||
@@ -95,17 +96,8 @@ class MailboxDashBoardView extends BaseMailboxDashBoardView {
|
||||
children: [
|
||||
SizedBox(child: MailboxView(), width: responsiveUtils.defaultSizeMenu),
|
||||
Expanded(child: Column(children: [
|
||||
Obx(() {
|
||||
if (controller.vacationResponse.value?.vacationResponderIsValid == true) {
|
||||
return VacationNotificationMessageWidget(
|
||||
margin: const EdgeInsets.only(top: 16, right: 16),
|
||||
vacationResponse: controller.vacationResponse.value!,
|
||||
actionGotoVacationSetting: () => controller.goToVacationSetting(),
|
||||
actionEndNow: () => controller.disableVacationResponder());
|
||||
} else {
|
||||
return const SizedBox.shrink();
|
||||
}
|
||||
}),
|
||||
_buildVacationNotificationMessage(context),
|
||||
_buildListButtonQuickSearchFilter(context),
|
||||
_buildMarkAsMailboxReadLoading(context),
|
||||
Expanded(child: Obx(() {
|
||||
switch(controller.routePath.value) {
|
||||
@@ -681,4 +673,164 @@ class MailboxDashBoardView extends BaseMailboxDashBoardView {
|
||||
}
|
||||
});
|
||||
}
|
||||
|
||||
Widget _buildVacationNotificationMessage(BuildContext context) {
|
||||
return Obx(() {
|
||||
if (controller.vacationResponse.value?.vacationResponderIsValid == true) {
|
||||
return VacationNotificationMessageWidget(
|
||||
margin: const EdgeInsets.only(top: 16, right: 16),
|
||||
vacationResponse: controller.vacationResponse.value!,
|
||||
actionGotoVacationSetting: () => controller.goToVacationSetting(),
|
||||
actionEndNow: () => controller.disableVacationResponder());
|
||||
} else {
|
||||
return const SizedBox.shrink();
|
||||
}
|
||||
});
|
||||
}
|
||||
|
||||
bool supportListButtonQuickSearchFilter(BuildContext context) {
|
||||
return controller.searchController.isSearchActive()
|
||||
&& controller.searchController.searchIsActive.isTrue
|
||||
&& responsiveUtils.isWebDesktop(context);
|
||||
}
|
||||
|
||||
Widget _buildListButtonQuickSearchFilter(BuildContext context) {
|
||||
return Obx(() {
|
||||
if (supportListButtonQuickSearchFilter(context)) {
|
||||
return Padding(
|
||||
padding: const EdgeInsets.only(right: 16, top: 16),
|
||||
child: Row(
|
||||
children: QuickSearchFilter.values
|
||||
.map((filter) => _buildQuickSearchFilterButton(context, filter))
|
||||
.toList()),
|
||||
);
|
||||
} else {
|
||||
return const SizedBox.shrink();
|
||||
}
|
||||
});
|
||||
}
|
||||
|
||||
Widget _buildQuickSearchFilterButton(
|
||||
BuildContext context,
|
||||
QuickSearchFilter filter
|
||||
) {
|
||||
return Obx(() {
|
||||
final quickSearchFilterSelected = controller.checkQuickSearchFilterSelected(
|
||||
quickSearchFilter: filter,
|
||||
);
|
||||
|
||||
return Padding(
|
||||
padding: const EdgeInsets.only(right: 8),
|
||||
child: InkWell(
|
||||
onTap: () {
|
||||
if (filter != QuickSearchFilter.last7Days) {
|
||||
controller.selectQuickSearchFilterAction(filter);
|
||||
}
|
||||
},
|
||||
onTapDown: (detail) {
|
||||
if (filter == QuickSearchFilter.last7Days) {
|
||||
final screenSize = MediaQuery.of(context).size;
|
||||
final offset = detail.globalPosition;
|
||||
final position = RelativeRect.fromLTRB(
|
||||
offset.dx,
|
||||
offset.dy,
|
||||
screenSize.width - offset.dx,
|
||||
screenSize.height - offset.dy,
|
||||
);
|
||||
controller.openPopupMenuAction(context, position,
|
||||
popupMenuEmailReceiveTimeType(context,
|
||||
controller.searchController.emailReceiveTimeType.value,
|
||||
(receiveTime) => controller.selectReceiveTimeQuickSearchFilter(receiveTime)));
|
||||
}
|
||||
},
|
||||
borderRadius: const BorderRadius.all(Radius.circular(10)),
|
||||
child: Container(
|
||||
decoration: BoxDecoration(
|
||||
borderRadius: BorderRadius.circular(10),
|
||||
color: filter.getBackgroundColor(quickSearchFilterSelected: quickSearchFilterSelected)),
|
||||
padding: const EdgeInsets.symmetric(horizontal: 12, vertical: 8),
|
||||
child: Row(mainAxisAlignment: MainAxisAlignment.center, children: [
|
||||
SvgPicture.asset(
|
||||
filter.getIcon(
|
||||
imagePaths,
|
||||
quickSearchFilterSelected: quickSearchFilterSelected),
|
||||
width: 16,
|
||||
height: 16,
|
||||
fit: BoxFit.fill),
|
||||
const SizedBox(width: 4),
|
||||
Text(
|
||||
filter.getTitle(
|
||||
context,
|
||||
receiveTimeType: controller.searchController.emailReceiveTimeType.value),
|
||||
maxLines: 1,
|
||||
overflow: TextOverflow.ellipsis,
|
||||
style: filter.getTextStyle(
|
||||
quickSearchFilterSelected: quickSearchFilterSelected),
|
||||
),
|
||||
if (filter == QuickSearchFilter.last7Days)
|
||||
... [
|
||||
const SizedBox(width: 4),
|
||||
SvgPicture.asset(
|
||||
imagePaths.icChevronDown,
|
||||
width: 16,
|
||||
height: 16,
|
||||
fit: BoxFit.fill),
|
||||
]
|
||||
])),
|
||||
),
|
||||
);
|
||||
});
|
||||
}
|
||||
|
||||
List<PopupMenuEntry> popupMenuEmailReceiveTimeType(
|
||||
BuildContext context,
|
||||
EmailReceiveTimeType? receiveTimeSelected,
|
||||
Function(EmailReceiveTimeType?)? onCallBack
|
||||
) {
|
||||
return EmailReceiveTimeType.values
|
||||
.map((timeType) => PopupMenuItem(
|
||||
padding: EdgeInsets.zero,
|
||||
child: _receiveTimeTileAction(
|
||||
context,
|
||||
receiveTimeSelected,
|
||||
timeType,
|
||||
onCallBack)))
|
||||
.toList();
|
||||
}
|
||||
|
||||
Widget _receiveTimeTileAction(
|
||||
BuildContext context,
|
||||
EmailReceiveTimeType? receiveTimeSelected,
|
||||
EmailReceiveTimeType receiveTimeType,
|
||||
Function(EmailReceiveTimeType?)? onCallBack
|
||||
) {
|
||||
return InkWell(
|
||||
onTap: () => onCallBack?.call(receiveTimeType == receiveTimeSelected
|
||||
? null
|
||||
: receiveTimeType),
|
||||
child: Padding(
|
||||
padding: const EdgeInsets.symmetric(horizontal: 24, vertical: 16),
|
||||
child: SizedBox(
|
||||
width: 320,
|
||||
child: Row(children: [
|
||||
Expanded(child: Text(
|
||||
receiveTimeType.getTitle(context),
|
||||
style: const TextStyle(
|
||||
fontSize: 17,
|
||||
color: Colors.black,
|
||||
fontWeight: FontWeight.normal))),
|
||||
if (receiveTimeType == receiveTimeSelected)
|
||||
...[
|
||||
const SizedBox(width: 12),
|
||||
SvgPicture.asset(
|
||||
imagePaths.icFilterSelected,
|
||||
width: 24,
|
||||
height: 24,
|
||||
fit: BoxFit.fill),
|
||||
]
|
||||
])
|
||||
),
|
||||
)
|
||||
);
|
||||
}
|
||||
}
|
||||
@@ -1,7 +1,6 @@
|
||||
|
||||
import 'package:core/core.dart';
|
||||
import 'package:model/email/presentation_email.dart';
|
||||
import 'package:tmail_ui_user/features/thread/domain/model/search_query.dart';
|
||||
|
||||
class SearchingState extends UIState {
|
||||
|
||||
@@ -11,15 +10,6 @@ class SearchingState extends UIState {
|
||||
List<Object> get props => [];
|
||||
}
|
||||
|
||||
class SearchEmailNewQuery extends UIState {
|
||||
final SearchQuery searchQuery;
|
||||
|
||||
SearchEmailNewQuery(this.searchQuery);
|
||||
|
||||
@override
|
||||
List<Object> get props => [searchQuery];
|
||||
}
|
||||
|
||||
class SearchEmailSuccess extends UIState {
|
||||
final List<PresentationEmail> emailList;
|
||||
|
||||
|
||||
@@ -94,7 +94,6 @@ class ThreadController extends BaseController {
|
||||
final MoveToMailboxInteractor _moveToMailboxInteractor;
|
||||
|
||||
final emailList = <PresentationEmail>[].obs;
|
||||
final searchIsActive = RxBool(false);
|
||||
|
||||
bool canLoadMore = true;
|
||||
bool canSearchMore = true;
|
||||
@@ -279,6 +278,9 @@ class ThreadController extends BaseController {
|
||||
} else if (action is DisableSearchEmailAction) {
|
||||
closeSearchEmailAction();
|
||||
mailboxDashBoardController.clearDashBoardAction();
|
||||
} else if (action is StartSearchEmailAction) {
|
||||
_searchEmail();
|
||||
mailboxDashBoardController.clearDashBoardAction();
|
||||
}
|
||||
}
|
||||
});
|
||||
@@ -286,10 +288,7 @@ class ThreadController extends BaseController {
|
||||
viewStateWorker = ever(mailboxDashBoardController.viewState, (viewState) {
|
||||
if (viewState is Either) {
|
||||
viewState.map((success) {
|
||||
if (success is SearchEmailNewQuery){
|
||||
mailboxDashBoardController.clearState();
|
||||
_searchEmail();
|
||||
} else if (success is MarkAsEmailReadSuccess) {
|
||||
if (success is MarkAsEmailReadSuccess) {
|
||||
_refreshEmailChanges(currentEmailState: success.currentEmailState);
|
||||
} else if (success is MoveToMailboxSuccess) {
|
||||
_refreshEmailChanges(currentEmailState: success.currentEmailState);
|
||||
@@ -842,7 +841,7 @@ class ThreadController extends BaseController {
|
||||
}
|
||||
|
||||
void disableSearch() {
|
||||
searchIsActive.value = false;
|
||||
searchController.searchIsActive.value = false;
|
||||
searchController.disableSearch();
|
||||
}
|
||||
|
||||
@@ -858,7 +857,7 @@ class ThreadController extends BaseController {
|
||||
|
||||
void _searchEmail({UnsignedInt? limit, EmailFilterCondition? filterMessageOption}) {
|
||||
if (_accountId != null && searchQuery != null) {
|
||||
searchIsActive.value = true;
|
||||
searchController.searchIsActive.value = true;
|
||||
|
||||
if(searchController.isAdvancedSearchHasApply.isFalse){
|
||||
searchController.updateFilterEmail(mailbox: currentMailbox);
|
||||
|
||||
@@ -10,7 +10,6 @@ import 'package:tmail_ui_user/features/email/presentation/widgets/email_action_c
|
||||
import 'package:tmail_ui_user/features/mailbox/domain/state/mark_as_mailbox_read_state.dart';
|
||||
import 'package:tmail_ui_user/features/mailbox_dashboard/domain/model/recent_search.dart';
|
||||
import 'package:tmail_ui_user/features/mailbox_dashboard/presentation/mixin/filter_email_popup_menu_mixin.dart';
|
||||
import 'package:tmail_ui_user/features/mailbox_dashboard/presentation/model/search/email_receive_time_type.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/icon_open_advanced_search_widget.dart';
|
||||
@@ -66,7 +65,6 @@ class ThreadView extends GetWidget<ThreadController> with AppLoaderMixin,
|
||||
_buildVacationNotificationMessage(context),
|
||||
],
|
||||
_buildEmptyTrashButton(context),
|
||||
_buildListButtonQuickSearchFilter(context),
|
||||
if (!_responsiveUtils.isDesktop(context))
|
||||
_buildMarkAsMailboxReadLoading(context),
|
||||
_buildLoadingView(),
|
||||
@@ -701,134 +699,6 @@ class ThreadView extends GetWidget<ThreadController> with AppLoaderMixin,
|
||||
];
|
||||
}
|
||||
|
||||
bool supportListButtonQuickSearchFilter(BuildContext context) {
|
||||
return controller.isSearchActive()
|
||||
&& controller.searchIsActive.isTrue
|
||||
&& _responsiveUtils.isWebDesktop(context);
|
||||
}
|
||||
|
||||
Widget _buildListButtonQuickSearchFilter(BuildContext context) {
|
||||
return Obx(() {
|
||||
if (supportListButtonQuickSearchFilter(context)) {
|
||||
return Padding(
|
||||
padding: EdgeInsets.only(
|
||||
left: _responsiveUtils.isWebDesktop(context) ? 32 : 16,
|
||||
right: _responsiveUtils.isWebDesktop(context) ? 20 : 16,
|
||||
bottom: _responsiveUtils.isWebDesktop(context) ? 0 : 16,
|
||||
top: _responsiveUtils.isWebDesktop(context) ? 16 : 0),
|
||||
child: Row(
|
||||
children: QuickSearchFilter.values
|
||||
.map((filter) => _buildQuickSearchFilterButton(context, filter))
|
||||
.toList()),
|
||||
);
|
||||
} else {
|
||||
return const SizedBox.shrink();
|
||||
}
|
||||
});
|
||||
}
|
||||
|
||||
Widget _buildQuickSearchFilterButton(
|
||||
BuildContext context, QuickSearchFilter filter) {
|
||||
return Obx(() {
|
||||
final quickSearchFilterSelected = controller.mailboxDashBoardController.checkQuickSearchFilterSelected(
|
||||
quickSearchFilter: filter,
|
||||
);
|
||||
|
||||
return Padding(
|
||||
padding: const EdgeInsets.only(right: 8),
|
||||
child: InkWell(
|
||||
onTap: () {
|
||||
if (filter != QuickSearchFilter.last7Days) {
|
||||
controller.selectQuickSearchFilter(filter);
|
||||
}
|
||||
},
|
||||
onTapDown: (detail) {
|
||||
if (filter == QuickSearchFilter.last7Days) {
|
||||
final screenSize = MediaQuery.of(context).size;
|
||||
final offset = detail.globalPosition;
|
||||
final position = RelativeRect.fromLTRB(
|
||||
offset.dx,
|
||||
offset.dy,
|
||||
screenSize.width - offset.dx,
|
||||
screenSize.height - offset.dy,
|
||||
);
|
||||
controller.openPopupReceiveTimeQuickSearchFilter(context, position,
|
||||
popupMenuEmailReceiveTimeType(context,
|
||||
controller.searchController.emailReceiveTimeType.value,
|
||||
(receiveTime) => controller.selectReceiveTimeQuickSearchFilter(receiveTime)));
|
||||
}
|
||||
},
|
||||
borderRadius: const BorderRadius.all(Radius.circular(10)),
|
||||
child: Container(
|
||||
decoration: BoxDecoration(
|
||||
borderRadius: BorderRadius.circular(10),
|
||||
color: filter.getBackgroundColor(quickSearchFilterSelected: quickSearchFilterSelected)),
|
||||
padding: const EdgeInsets.symmetric(horizontal: 12, vertical: 8),
|
||||
child: Row(mainAxisAlignment: MainAxisAlignment.center, children: [
|
||||
SvgPicture.asset(
|
||||
filter.getIcon(_imagePaths, quickSearchFilterSelected: quickSearchFilterSelected),
|
||||
width: 16,
|
||||
height: 16,
|
||||
fit: BoxFit.fill),
|
||||
const SizedBox(width: 4),
|
||||
Text(
|
||||
filter.getTitle(context, receiveTimeType: controller.searchController.emailReceiveTimeType.value),
|
||||
maxLines: 1,
|
||||
overflow: TextOverflow.ellipsis,
|
||||
style: filter.getTextStyle(quickSearchFilterSelected: quickSearchFilterSelected),
|
||||
),
|
||||
if (filter == QuickSearchFilter.last7Days)
|
||||
... [
|
||||
const SizedBox(width: 4),
|
||||
SvgPicture.asset(
|
||||
_imagePaths.icChevronDown,
|
||||
width: 16,
|
||||
height: 16,
|
||||
fit: BoxFit.fill),
|
||||
]
|
||||
])),
|
||||
),
|
||||
);
|
||||
});
|
||||
}
|
||||
|
||||
List<PopupMenuEntry> popupMenuEmailReceiveTimeType(BuildContext context,
|
||||
EmailReceiveTimeType? receiveTimeSelected, Function(EmailReceiveTimeType?)? onCallBack) {
|
||||
return EmailReceiveTimeType.values
|
||||
.map((timeType) => PopupMenuItem(
|
||||
padding: EdgeInsets.zero,
|
||||
child: _receiveTimeTileAction(context, receiveTimeSelected, timeType, onCallBack)))
|
||||
.toList();
|
||||
}
|
||||
|
||||
Widget _receiveTimeTileAction(
|
||||
BuildContext context,
|
||||
EmailReceiveTimeType? receiveTimeSelected,
|
||||
EmailReceiveTimeType receiveTimeType,
|
||||
Function(EmailReceiveTimeType?)? onCallBack
|
||||
) {
|
||||
return InkWell(
|
||||
onTap: () => onCallBack?.call(receiveTimeType == receiveTimeSelected
|
||||
? null
|
||||
: receiveTimeType),
|
||||
child: Padding(
|
||||
padding: const EdgeInsets.symmetric(horizontal: 24, vertical: 16),
|
||||
child: SizedBox(
|
||||
width: 320,
|
||||
child: Row(children: [
|
||||
Expanded(child: Text(
|
||||
receiveTimeType.getTitle(context),
|
||||
style: const TextStyle(fontSize: 17, color: Colors.black, fontWeight: FontWeight.normal))),
|
||||
if (receiveTimeType == receiveTimeSelected)
|
||||
const SizedBox(width: 12),
|
||||
if (receiveTimeType == receiveTimeSelected)
|
||||
SvgPicture.asset(_imagePaths.icFilterSelected, width: 24, height: 24, fit: BoxFit.fill),
|
||||
])
|
||||
),
|
||||
)
|
||||
);
|
||||
}
|
||||
|
||||
Widget _buildQuickSearchFilterButtonSuggestionBox(
|
||||
BuildContext context, QuickSearchFilter filter) {
|
||||
return Obx(() {
|
||||
|
||||
Reference in New Issue
Block a user