|
|
|
|
@ -1,7 +1,9 @@
|
|
|
|
|
import 'dart:async';
|
|
|
|
|
import 'dart:developer';
|
|
|
|
|
|
|
|
|
|
import 'package:easy_localization/easy_localization.dart';
|
|
|
|
|
import 'package:flutter/material.dart';
|
|
|
|
|
import 'package:mc_common_app/classes/app_state.dart';
|
|
|
|
|
import 'package:mc_common_app/classes/consts.dart';
|
|
|
|
|
import 'package:mc_common_app/extensions/int_extensions.dart';
|
|
|
|
|
import 'package:mc_common_app/extensions/string_extensions.dart';
|
|
|
|
|
@ -16,6 +18,7 @@ import 'package:mc_common_app/widgets/common_widgets/app_bar.dart';
|
|
|
|
|
import 'package:mc_common_app/widgets/common_widgets/search_entity_widget.dart';
|
|
|
|
|
import 'package:mc_common_app/widgets/dropdown/dropdow_field.dart';
|
|
|
|
|
import 'package:mc_common_app/widgets/extensions/extensions_widget.dart';
|
|
|
|
|
import 'package:mc_common_app/widgets/txt_field.dart';
|
|
|
|
|
import 'package:provider/provider.dart';
|
|
|
|
|
import 'package:sizer/sizer.dart';
|
|
|
|
|
|
|
|
|
|
@ -33,6 +36,7 @@ class _AppointmentsFilterViewState extends State<AppointmentsFilterView> {
|
|
|
|
|
void initState() {
|
|
|
|
|
appointmentsVM = context.read<AppointmentsVM>();
|
|
|
|
|
scheduleMicrotask(() async {
|
|
|
|
|
log('herre called');
|
|
|
|
|
await appointmentsVM.populateDataForAppointmentsFilter();
|
|
|
|
|
});
|
|
|
|
|
super.initState();
|
|
|
|
|
@ -44,6 +48,21 @@ class _AppointmentsFilterViewState extends State<AppointmentsFilterView> {
|
|
|
|
|
super.dispose();
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
// Provider filters
|
|
|
|
|
|
|
|
|
|
// * Service
|
|
|
|
|
// * Customer name
|
|
|
|
|
// * Mobile number
|
|
|
|
|
// * Type of service Delivery
|
|
|
|
|
|
|
|
|
|
// Customer filters
|
|
|
|
|
|
|
|
|
|
// * Provider
|
|
|
|
|
// * Branch
|
|
|
|
|
// * Category
|
|
|
|
|
// * Service
|
|
|
|
|
// * Item
|
|
|
|
|
|
|
|
|
|
@override
|
|
|
|
|
Widget build(BuildContext context) {
|
|
|
|
|
return Scaffold(
|
|
|
|
|
@ -59,96 +78,154 @@ class _AppointmentsFilterViewState extends State<AppointmentsFilterView> {
|
|
|
|
|
),
|
|
|
|
|
body: Consumer<AppointmentsVM>(
|
|
|
|
|
builder: (BuildContext context, AppointmentsVM appointmentsVM, Widget? child) {
|
|
|
|
|
return WillPopScope(
|
|
|
|
|
onWillPop: () async {
|
|
|
|
|
context.read<AdVM>().resetValues();
|
|
|
|
|
return true;
|
|
|
|
|
return PopScope(
|
|
|
|
|
onPopInvokedWithResult: (bool result, dynamic) {
|
|
|
|
|
if (result) {
|
|
|
|
|
context.read<AdVM>().resetValues();
|
|
|
|
|
}
|
|
|
|
|
},
|
|
|
|
|
child: Column(
|
|
|
|
|
children: [
|
|
|
|
|
ListView(
|
|
|
|
|
children: [
|
|
|
|
|
20.height,
|
|
|
|
|
SearchEntityWidget(
|
|
|
|
|
title: LocaleKeys.searchByProvider.tr(),
|
|
|
|
|
actionWidget: Builder(
|
|
|
|
|
builder: (context) {
|
|
|
|
|
return DropdownField(
|
|
|
|
|
(DropValue value) => appointmentsVM.updateAppointmentFilterSelectedProviderId(SelectionModel(selectedId: value.id, selectedOption: value.value), isForSearch: true),
|
|
|
|
|
list: appointmentsVM.providersDropList,
|
|
|
|
|
dropdownValue: appointmentsVM.appointmentFilterSelectedProviderId.selectedId != -1
|
|
|
|
|
? DropValue(appointmentsVM.appointmentFilterSelectedProviderId.selectedId, appointmentsVM.appointmentFilterSelectedProviderId.selectedOption, "")
|
|
|
|
|
: null,
|
|
|
|
|
hint: LocaleKeys.selectProvider.tr(),
|
|
|
|
|
);
|
|
|
|
|
if (AppState().currentAppType == AppType.provider) ...[
|
|
|
|
|
SearchEntityWidget(
|
|
|
|
|
title: LocaleKeys.searchByCustomerName.tr(),
|
|
|
|
|
isForString: true,
|
|
|
|
|
actionWidget: TxtField(
|
|
|
|
|
value: appointmentsVM.currentCustomerNameFilter,
|
|
|
|
|
onChanged: (value) => appointmentsVM.onCurrentCustomerNameFilterChanged(value),
|
|
|
|
|
hint: LocaleKeys.enterCustomerName.tr(),
|
|
|
|
|
postfixWidget: Consumer(
|
|
|
|
|
builder: (BuildContext context, AppointmentsVM appointmentVm, Widget? child) {
|
|
|
|
|
if (appointmentsVM.currentCustomerNameFilter.isEmpty) {
|
|
|
|
|
return const SizedBox();
|
|
|
|
|
}
|
|
|
|
|
return IconButton(
|
|
|
|
|
onPressed: () => appointmentsVM.addAppointmentFilterCustomerNameSearchHistory(value: appointmentsVM.currentCustomerNameFilter),
|
|
|
|
|
icon: const Icon(Icons.done, color: MyColors.lightIconColor),
|
|
|
|
|
);
|
|
|
|
|
},
|
|
|
|
|
),
|
|
|
|
|
),
|
|
|
|
|
historyContentString: appointmentsVM.appointmentFilterCustomerNameSearchHistory,
|
|
|
|
|
onHistoryItemDeleted: (index) {
|
|
|
|
|
appointmentsVM.removeAppointmentFilterCustomerNameSearchHistory(index: index);
|
|
|
|
|
},
|
|
|
|
|
onHistoryItemTapped: (DropValue value) => null,
|
|
|
|
|
historyContent: const [], // ignore in the case of TEXT FIELD
|
|
|
|
|
),
|
|
|
|
|
historyContent: appointmentsVM.appointmentFilterProviderSearchHistory,
|
|
|
|
|
onHistoryItemDeleted: (index) {
|
|
|
|
|
appointmentsVM.removeAppointmentFilterProviderSearchHistory(index: index);
|
|
|
|
|
},
|
|
|
|
|
onHistoryItemTapped: (DropValue value) =>
|
|
|
|
|
appointmentsVM.updateAppointmentFilterSelectedProviderId(SelectionModel(selectedId: value.id, selectedOption: value.value), isForSearch: true),
|
|
|
|
|
),
|
|
|
|
|
if (appointmentsVM.state == ViewState.busy) ...[
|
|
|
|
|
Row(
|
|
|
|
|
mainAxisAlignment: MainAxisAlignment.center,
|
|
|
|
|
children: [
|
|
|
|
|
SizedBox(
|
|
|
|
|
height: 5.h,
|
|
|
|
|
width: 5.h,
|
|
|
|
|
child: const CircularProgressIndicator(),
|
|
|
|
|
const Divider(thickness: 1.2).paddingOnly(top: 5, bottom: 5),
|
|
|
|
|
SearchEntityWidget(
|
|
|
|
|
title: LocaleKeys.searchByMobileNumber.tr(),
|
|
|
|
|
isForString: true,
|
|
|
|
|
actionWidget: TxtField(
|
|
|
|
|
onChanged: (value) => appointmentsVM.onCurrentMobilePhoneFilterChanged(value),
|
|
|
|
|
value: appointmentsVM.currentMobilePhoneFilter,
|
|
|
|
|
hint: LocaleKeys.enterMobileNumber.tr(),
|
|
|
|
|
postfixWidget: Consumer(
|
|
|
|
|
builder: (BuildContext context, AppointmentsVM appointmentVm, Widget? child) {
|
|
|
|
|
if (appointmentsVM.currentMobilePhoneFilter.isEmpty) {
|
|
|
|
|
return const SizedBox();
|
|
|
|
|
}
|
|
|
|
|
return IconButton(
|
|
|
|
|
onPressed: () => appointmentsVM.addAppointmentFilterMobilePhoneSearchHistory(value: appointmentsVM.currentMobilePhoneFilter),
|
|
|
|
|
icon: const Icon(Icons.done, color: MyColors.lightIconColor),
|
|
|
|
|
);
|
|
|
|
|
},
|
|
|
|
|
),
|
|
|
|
|
],
|
|
|
|
|
),
|
|
|
|
|
historyContentString: appointmentsVM.appointmentFilterMobilePhoneSearchHistory,
|
|
|
|
|
onHistoryItemDeleted: (index) {
|
|
|
|
|
appointmentsVM.removeAppointmentFilterMobilePhoneSearchHistory(index: index);
|
|
|
|
|
},
|
|
|
|
|
onHistoryItemTapped: (DropValue value) => null,
|
|
|
|
|
historyContent: const [], // ignore in the case of TEXT FIELD
|
|
|
|
|
),
|
|
|
|
|
],
|
|
|
|
|
if (appointmentsVM.appointmentFilterProviderSearchHistory.isNotEmpty) ...[
|
|
|
|
|
const Divider(thickness: 1.2).paddingOnly(top: 5, bottom: 5),
|
|
|
|
|
] else ...[
|
|
|
|
|
SearchEntityWidget(
|
|
|
|
|
title: LocaleKeys.searchByBranch.tr(),
|
|
|
|
|
title: LocaleKeys.searchByProvider.tr(),
|
|
|
|
|
actionWidget: Builder(
|
|
|
|
|
builder: (context) {
|
|
|
|
|
return DropdownField(
|
|
|
|
|
(DropValue value) => appointmentsVM.updateAppointmentFilterSelectedBranchId(SelectionModel(selectedId: value.id, selectedOption: value.value), isForSearch: true),
|
|
|
|
|
list: appointmentsVM.branchesDropList,
|
|
|
|
|
dropdownValue: appointmentsVM.appointmentFilterSelectedBranchId.selectedId != -1
|
|
|
|
|
? DropValue(appointmentsVM.appointmentFilterSelectedBranchId.selectedId, appointmentsVM.appointmentFilterSelectedBranchId.selectedOption, "")
|
|
|
|
|
(DropValue value) => appointmentsVM.updateAppointmentFilterSelectedProviderId(SelectionModel(selectedId: value.id, selectedOption: value.value), isForSearch: true),
|
|
|
|
|
list: appointmentsVM.providersDropList,
|
|
|
|
|
dropdownValue: appointmentsVM.appointmentFilterSelectedProviderId.selectedId != -1
|
|
|
|
|
? DropValue(appointmentsVM.appointmentFilterSelectedProviderId.selectedId, appointmentsVM.appointmentFilterSelectedProviderId.selectedOption, "")
|
|
|
|
|
: null,
|
|
|
|
|
hint: LocaleKeys.selectBranch.tr(),
|
|
|
|
|
hint: LocaleKeys.selectProvider.tr(),
|
|
|
|
|
);
|
|
|
|
|
},
|
|
|
|
|
),
|
|
|
|
|
historyContent: appointmentsVM.appointmentFilterBranchSearchHistory,
|
|
|
|
|
historyContent: appointmentsVM.appointmentFilterProviderSearchHistory,
|
|
|
|
|
onHistoryItemDeleted: (index) {
|
|
|
|
|
appointmentsVM.removeAppointmentFilterBranchSearchHistory(index: index);
|
|
|
|
|
appointmentsVM.removeAppointmentFilterProviderSearchHistory(index: index);
|
|
|
|
|
},
|
|
|
|
|
onHistoryItemTapped: (DropValue value) =>
|
|
|
|
|
appointmentsVM.updateAppointmentFilterSelectedBranchId(SelectionModel(selectedId: value.id, selectedOption: value.value), isForSearch: true),
|
|
|
|
|
appointmentsVM.updateAppointmentFilterSelectedProviderId(SelectionModel(selectedId: value.id, selectedOption: value.value), isForSearch: true),
|
|
|
|
|
),
|
|
|
|
|
],
|
|
|
|
|
const Divider(thickness: 1.2).paddingOnly(top: 5, bottom: 5),
|
|
|
|
|
SearchEntityWidget(
|
|
|
|
|
title: LocaleKeys.searchByCategory.tr(),
|
|
|
|
|
actionWidget: Builder(
|
|
|
|
|
builder: (context) {
|
|
|
|
|
return DropdownField(
|
|
|
|
|
(DropValue value) => appointmentsVM.updateAppointmentFilterSelectedCategoryId(SelectionModel(selectedId: value.id, selectedOption: value.value), isForSearch: true),
|
|
|
|
|
list: appointmentsVM.categoryDropList,
|
|
|
|
|
dropdownValue: appointmentsVM.appointmentFilterSelectedCategoryId.selectedId != -1
|
|
|
|
|
? DropValue(appointmentsVM.appointmentFilterSelectedCategoryId.selectedId, appointmentsVM.appointmentFilterSelectedCategoryId.selectedOption, "")
|
|
|
|
|
: null,
|
|
|
|
|
hint: LocaleKeys.selectCategory.tr(),
|
|
|
|
|
);
|
|
|
|
|
if (appointmentsVM.state == ViewState.busy) ...[
|
|
|
|
|
Row(
|
|
|
|
|
mainAxisAlignment: MainAxisAlignment.center,
|
|
|
|
|
children: [
|
|
|
|
|
SizedBox(
|
|
|
|
|
height: 5.h,
|
|
|
|
|
width: 5.h,
|
|
|
|
|
child: const CircularProgressIndicator(),
|
|
|
|
|
),
|
|
|
|
|
],
|
|
|
|
|
),
|
|
|
|
|
],
|
|
|
|
|
if (appointmentsVM.appointmentFilterProviderSearchHistory.isNotEmpty) ...[
|
|
|
|
|
const Divider(thickness: 1.2).paddingOnly(top: 5, bottom: 5),
|
|
|
|
|
SearchEntityWidget(
|
|
|
|
|
title: LocaleKeys.searchByBranch.tr(),
|
|
|
|
|
actionWidget: Builder(
|
|
|
|
|
builder: (context) {
|
|
|
|
|
return DropdownField(
|
|
|
|
|
(DropValue value) => appointmentsVM.updateAppointmentFilterSelectedBranchId(SelectionModel(selectedId: value.id, selectedOption: value.value), isForSearch: true),
|
|
|
|
|
list: appointmentsVM.branchesDropList,
|
|
|
|
|
dropdownValue: appointmentsVM.appointmentFilterSelectedBranchId.selectedId != -1
|
|
|
|
|
? DropValue(appointmentsVM.appointmentFilterSelectedBranchId.selectedId, appointmentsVM.appointmentFilterSelectedBranchId.selectedOption, "")
|
|
|
|
|
: null,
|
|
|
|
|
hint: LocaleKeys.selectBranch.tr(),
|
|
|
|
|
);
|
|
|
|
|
},
|
|
|
|
|
),
|
|
|
|
|
historyContent: appointmentsVM.appointmentFilterBranchSearchHistory,
|
|
|
|
|
onHistoryItemDeleted: (index) {
|
|
|
|
|
appointmentsVM.removeAppointmentFilterBranchSearchHistory(index: index);
|
|
|
|
|
},
|
|
|
|
|
onHistoryItemTapped: (DropValue value) =>
|
|
|
|
|
appointmentsVM.updateAppointmentFilterSelectedBranchId(SelectionModel(selectedId: value.id, selectedOption: value.value), isForSearch: true),
|
|
|
|
|
),
|
|
|
|
|
],
|
|
|
|
|
const Divider(thickness: 1.2).paddingOnly(top: 5, bottom: 5),
|
|
|
|
|
SearchEntityWidget(
|
|
|
|
|
title: LocaleKeys.searchByCategory.tr(),
|
|
|
|
|
actionWidget: Builder(
|
|
|
|
|
builder: (context) {
|
|
|
|
|
return DropdownField(
|
|
|
|
|
(DropValue value) => appointmentsVM.updateAppointmentFilterSelectedCategoryId(SelectionModel(selectedId: value.id, selectedOption: value.value), isForSearch: true),
|
|
|
|
|
list: appointmentsVM.categoryDropList,
|
|
|
|
|
dropdownValue: appointmentsVM.appointmentFilterSelectedCategoryId.selectedId != -1
|
|
|
|
|
? DropValue(appointmentsVM.appointmentFilterSelectedCategoryId.selectedId, appointmentsVM.appointmentFilterSelectedCategoryId.selectedOption, "")
|
|
|
|
|
: null,
|
|
|
|
|
hint: LocaleKeys.selectCategory.tr(),
|
|
|
|
|
);
|
|
|
|
|
},
|
|
|
|
|
),
|
|
|
|
|
historyContent: appointmentsVM.appointmentFilterCategorySearchHistory,
|
|
|
|
|
onHistoryItemDeleted: (index) {
|
|
|
|
|
appointmentsVM.removeAppointmentFilterCategorySearchHistory(index: index);
|
|
|
|
|
},
|
|
|
|
|
onHistoryItemTapped: (DropValue value) =>
|
|
|
|
|
appointmentsVM.updateAppointmentFilterSelectedCategoryId(SelectionModel(selectedId: value.id, selectedOption: value.value), isForSearch: true),
|
|
|
|
|
),
|
|
|
|
|
historyContent: appointmentsVM.appointmentFilterCategorySearchHistory,
|
|
|
|
|
onHistoryItemDeleted: (index) {
|
|
|
|
|
appointmentsVM.removeAppointmentFilterCategorySearchHistory(index: index);
|
|
|
|
|
},
|
|
|
|
|
onHistoryItemTapped: (DropValue value) =>
|
|
|
|
|
appointmentsVM.updateAppointmentFilterSelectedCategoryId(SelectionModel(selectedId: value.id, selectedOption: value.value), isForSearch: true),
|
|
|
|
|
),
|
|
|
|
|
const Divider(thickness: 1.2).paddingOnly(top: 5, bottom: 5),
|
|
|
|
|
const Divider(thickness: 1.2).paddingOnly(top: 5, bottom: 5),
|
|
|
|
|
],
|
|
|
|
|
SearchEntityWidget(
|
|
|
|
|
title: LocaleKeys.searchByService.tr(),
|
|
|
|
|
actionWidget: Builder(builder: (context) {
|
|
|
|
|
@ -166,22 +243,41 @@ class _AppointmentsFilterViewState extends State<AppointmentsFilterView> {
|
|
|
|
|
onHistoryItemTapped: (DropValue value) => null,
|
|
|
|
|
),
|
|
|
|
|
const Divider(thickness: 1.2).paddingOnly(top: 5, bottom: 5),
|
|
|
|
|
SearchEntityWidget(
|
|
|
|
|
title: LocaleKeys.searchByItem.tr(),
|
|
|
|
|
actionWidget: Builder(builder: (context) {
|
|
|
|
|
return DropdownField(
|
|
|
|
|
(DropValue value) => appointmentsVM.updateAppointmentFilterSelectedItemId(SelectionModel(selectedId: value.id, selectedOption: value.value), isForSearch: true),
|
|
|
|
|
list: appointmentsVM.itemsDropList,
|
|
|
|
|
dropdownValue: appointmentsVM.appointmentFilterSelectedItemId.selectedId != -1
|
|
|
|
|
? DropValue(appointmentsVM.appointmentFilterSelectedItemId.selectedId, appointmentsVM.appointmentFilterSelectedItemId.selectedOption, "")
|
|
|
|
|
: null,
|
|
|
|
|
hint: LocaleKeys.selectItems.tr(),
|
|
|
|
|
);
|
|
|
|
|
}),
|
|
|
|
|
historyContent: appointmentsVM.appointmentFilterItemsSearchHistory,
|
|
|
|
|
onHistoryItemDeleted: (index) => appointmentsVM.removeAppointmentFilterItemsSearchHistory(index: index),
|
|
|
|
|
onHistoryItemTapped: (DropValue value) => null,
|
|
|
|
|
),
|
|
|
|
|
if (AppState().currentAppType == AppType.customer) ...[
|
|
|
|
|
SearchEntityWidget(
|
|
|
|
|
title: LocaleKeys.searchByItem.tr(),
|
|
|
|
|
actionWidget: Builder(builder: (context) {
|
|
|
|
|
return DropdownField(
|
|
|
|
|
(DropValue value) => appointmentsVM.updateAppointmentFilterSelectedItemId(SelectionModel(selectedId: value.id, selectedOption: value.value), isForSearch: true),
|
|
|
|
|
list: appointmentsVM.itemsDropList,
|
|
|
|
|
dropdownValue: appointmentsVM.appointmentFilterSelectedItemId.selectedId != -1
|
|
|
|
|
? DropValue(appointmentsVM.appointmentFilterSelectedItemId.selectedId, appointmentsVM.appointmentFilterSelectedItemId.selectedOption, "")
|
|
|
|
|
: null,
|
|
|
|
|
hint: LocaleKeys.selectItems.tr(),
|
|
|
|
|
);
|
|
|
|
|
}),
|
|
|
|
|
historyContent: appointmentsVM.appointmentFilterItemsSearchHistory,
|
|
|
|
|
onHistoryItemDeleted: (index) => appointmentsVM.removeAppointmentFilterItemsSearchHistory(index: index),
|
|
|
|
|
onHistoryItemTapped: (DropValue value) => null,
|
|
|
|
|
),
|
|
|
|
|
] else ...[
|
|
|
|
|
SearchEntityWidget(
|
|
|
|
|
title: LocaleKeys.searchByServiceDelivery.tr(),
|
|
|
|
|
actionWidget: Builder(builder: (context) {
|
|
|
|
|
return DropdownField(
|
|
|
|
|
(DropValue value) => appointmentsVM.updateAppointmentFilterSelectedServiceDeliveryId(SelectionModel(selectedId: value.id, selectedOption: value.value), isForSearch: true),
|
|
|
|
|
list: appointmentsVM.serviceDeliveryTypesDropList,
|
|
|
|
|
dropdownValue: appointmentsVM.appointmentFilterSelectedServiceDeliveryId.selectedId != -1
|
|
|
|
|
? DropValue(appointmentsVM.appointmentFilterSelectedServiceDeliveryId.selectedId, appointmentsVM.appointmentFilterSelectedServiceDeliveryId.selectedOption, "")
|
|
|
|
|
: null,
|
|
|
|
|
hint: LocaleKeys.selectDeliveryType.tr(),
|
|
|
|
|
);
|
|
|
|
|
}),
|
|
|
|
|
historyContent: appointmentsVM.appointmentFilterServiceDeliverySearchHistory,
|
|
|
|
|
onHistoryItemDeleted: (index) => appointmentsVM.removeAppointmentFilterServiceDeliverySearchHistory(index: index),
|
|
|
|
|
onHistoryItemTapped: (DropValue value) => null,
|
|
|
|
|
),
|
|
|
|
|
],
|
|
|
|
|
],
|
|
|
|
|
).expand(),
|
|
|
|
|
Container(
|
|
|
|
|
@ -197,7 +293,12 @@ class _AppointmentsFilterViewState extends State<AppointmentsFilterView> {
|
|
|
|
|
title: LocaleKeys.search.tr(),
|
|
|
|
|
onPressed: () {
|
|
|
|
|
Navigator.pop(context);
|
|
|
|
|
appointmentsVM.getAppointmentsBasedOnFilters();
|
|
|
|
|
|
|
|
|
|
if (AppState().currentAppType == AppType.provider) {
|
|
|
|
|
appointmentsVM.getAppointmentsBasedOnFiltersForProviders(branchID: appointmentsVM.selectedBranchIdForAppointments);
|
|
|
|
|
} else {
|
|
|
|
|
appointmentsVM.getAppointmentsBasedOnFiltersForCustomer();
|
|
|
|
|
}
|
|
|
|
|
},
|
|
|
|
|
backgroundColor: MyColors.darkPrimaryColor,
|
|
|
|
|
txtColor: MyColors.white,
|
|
|
|
|
@ -208,7 +309,9 @@ class _AppointmentsFilterViewState extends State<AppointmentsFilterView> {
|
|
|
|
|
),
|
|
|
|
|
8.height,
|
|
|
|
|
InkWell(
|
|
|
|
|
onTap: () => appointmentsVM.clearAppointmentFilters(),
|
|
|
|
|
onTap: () {
|
|
|
|
|
appointmentsVM.clearAppointmentFilters();
|
|
|
|
|
},
|
|
|
|
|
child: LocaleKeys.clearFilters.tr().toText(
|
|
|
|
|
fontSize: 14,
|
|
|
|
|
isBold: true,
|
|
|
|
|
|