Как я могу получить строки разбитой на страницы данных с даты начала до даты окончания из списка и добавить панель поиска, как показано на рисунке?

Я хочу получить строки таблицы данных на основе даты начала и даты окончания.

Предположим, моя дата начала - «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.

0 ответов

Другие вопросы по тегам