Как я могу получить строки разбитой на страницы данных с даты начала до даты окончания из списка и добавить панель поиска, как показано на рисунке?
Я хочу получить строки таблицы данных на основе даты начала и даты окончания.
Предположим, моя дата начала - «2021-09-08», а дата окончания - «2021-10-08».
На основе этих дат мне нужны строки paginatedDatatable с использованием флаттера. Мне нужны даты между датой начала и датой окончания, используя приведенный ниже список. Приведенный ниже код отлично работает с datatable, но мне он нужен с разбивкой на страницы.
class MyData extends DataTableSource {
final List<UserView> _data = [];
List<UserView> userData = [
UserView(
date: '4-6-2021',
description: 'Product Ordered',
amount: 189.14,
status: '0'), .........
];
@override
bool get isRowCountApproximate => false;
@override
int get rowCount => userData.length;
@override
int get selectedRowCount => 0;
@override
DataRow getRow(int index) {
return DataRow(cells: [
DataCell(Text(userData[index].date)),
DataCell(Text(userData[index].description)),
DataCell(Text('${userData[index].amount}')),
]);
}
}
Ниже приведен класс виджета с отслеживанием состояния
class UserViewPageState {
final DataTableSource _data = MyData();
List<UserView> _foundUsers = [];
late DateTime from = DateTime.now();
late DateTime to = DateTime.now();
......
PaginatedDataTable(
source: _data,
columns: const [
DataColumn(label: Text('Date')),
DataColumn(label: Text('Description')),
DataColumn(label: Text('Amount')),
DataColumn(label: Text('Status')),
],
columnSpacing: 20,
horizontalMargin: 10,
rowsPerPage: 6,
showCheckboxColumn: false,
),
искать штрих-код, но не работает
void _runFilter(String enteredKeyword) {
List<UserView> results = [];
if (enteredKeyword.isEmpty) {
results = d;
} else {
results = d
.where((name) =>
name.date.toLowerCase().contains(enteredKeyword.toLowerCase()) ||
name.description
.toString()
.contains(enteredKeyword.toLowerCase()))
.cast<UserView>()
.toList();
}
setState(() {
_foundUsers = results;
});
}
Код фильтрации даты, но не работает
late DateTime from = DateTime.now();
late DateTime to = DateTime.now();
Future<void> _selectDate(BuildContext context, int i) async {
final DateTime? pickedDate = await showDatePicker(
context: context,
initialDate: DateTime.now(),
firstDate: DateTime(2015),
lastDate: DateTime(2050));
if (pickedDate != null) {
if (i == 0) {
setState(() {
from = pickedDate;
});
} else if (i == 1) {
setState(() {
to = pickedDate;
getdaysInBetween();
});
}
}
}
getdaysInBetween() {
List<UserView> results = [];
results = _usersViewData.where((user) {
final currentDate = DateTime.tryParse(user.date);
return currentDate != null &&
currentDate.isAfter(from.subtract(const Duration(days: 1))) &&
currentDate.isBefore(to.add(const Duration(days: 1)));
}).toList();
setState(() {
_foundRows = results;
});
}
Как можно заставить работать функционал панели поиска, Fromdate и Todate.