dynamic_searchbar 1.0.0 dynamic_searchbar: ^1.0.0 copied to clipboard
Define your fields and filter the list by keyword, date range, and number range. And sort it.
Introduction #
Define your fields and filter the list by keyword, date range, and number range. And sort it. You can filter on frontend and backend.
Usage #
First, define your filter as in the example below.
final List<FilterAction> employeeFilter = [
FilterAction(
title: 'Firstname',
field: 'firstname',
),
FilterAction(
title: 'Age',
field: 'age',
type: FilterType.numberRangeFilter,
numberRange: const RangeValues(18, 65),
),
FilterAction(
title: 'Hired date',
field: 'hiredDate',
type: FilterType.dateRangeFilter,
dateRange: DateTimeRange(
start: DateTime.now(),
end: DateTime.now(),
),
),
];
final List<SortAction> employeeSort = [
SortAction(
title: 'Firstname ASC',
field: 'firstname',
),
SortAction(
title: 'Email DESC',
field: 'email',
order: OrderType.desc,
),
SortAction(
title: 'Hired date ASC',
field: 'hiredDate',
),
];
then use the SearchField widget.
SearchField(
disableFilter: false, // if true, filters are disabled.
filters: employeeFilter, // specify your filters
sorts: employeeSort, // specify your sorts
initialData: sampleList, // specify the data to filter.
onChanged: (List<Employee> data) => setState(
() => samples = data,
), // the value is returned in the onChanged method when filtering.
onFilter: (Map filters) => print(filters), // The filter json data will be returned.
),
Customize filter #
If you want to customize, you can wrap it with GlobalSearchbar widget. Then you need to define the SearchThemeData object. Here's an example with the following code
SearchThemeData(
filterIcon: Icons.filter_list_sharp,
title: 'Filter',
filterTitle: 'Filters',
sortTitle: 'Sorts',
primaryColor: Colors.tealAccent,
iconColor: const Color(0xFFE8E7E4),
applyButton: ActionButtonTheme(
title: 'Apply',
style: ButtonStyle(
backgroundColor:
MaterialStateProperty.all<Color>(const Color(0xFF348FFF)),
),
),
clearFilterButton: ActionButtonTheme(
title: 'Clear filter',
style: ButtonStyle(
backgroundColor:
MaterialStateProperty.all<Color>(const Color(0xFF3DD89B)),
),
),
cancelButton: ActionButtonTheme(
title: 'Cancel',
style: ButtonStyle(
backgroundColor:
MaterialStateProperty.all<Color>(const Color(0xFFE8E7E4)),
),
),
),