0

我正在尝试创建一个可以过滤的分页数据表,但是如果数据被过滤,则排序不起作用。

添加一些打印检查后,它显示数据已经过滤和正确排序,但是 DataTableSource 中的 notifyListeners() 似乎没有更新视图。但是,当未过滤数据时,它可以正常工作。

这是 DataTableSource 中的排序函数:

  void _sort<T>(Comparable<T> getField(Item item), bool ascending) {
    print("sort data ${ascending ? "ascending" : "descending"}");
    print("item list size: ${_itemList.length}");
    _itemList.sort((Item a, Item b) {
      final aValue = getField(a);
      final bValue = getField(b);
      return ascending ? Comparable.compare(aValue, bValue) : Comparable.compare(bValue, aValue);
    });
    notifyListeners();
  }

这是过滤数据的方式:

_itemData = _provider.item.where((element) => element.code.toLowerCase().contains(filterText.toLowerCase())).toList();

_provider 是数据提供者,它使用 ChangeNotifier 跟踪数据更改,然后将其传递给 DataSource:

_itemDataSource = ItemDataSource(item: _itemData, context: context);
...
source: _itemDataSource,

输出:

flutter: sort data descending
flutter: item list size: 1186
flutter: sort data ascending
flutter: item list size: 1186
flutter: sort data descending
flutter: item list size: 24
flutter: sort data ascending
flutter: item list size: 24

非常感谢任何建议或帮助

4

0 回答 0