diff --git a/.fvmrc b/.fvmrc new file mode 100644 index 0000000..d80cf57 --- /dev/null +++ b/.fvmrc @@ -0,0 +1,3 @@ +{ + "flutter": "3.41.9" +} \ No newline at end of file diff --git a/example/pubspec.lock b/example/pubspec.lock index 437b95f..26bd614 100644 --- a/example/pubspec.lock +++ b/example/pubspec.lock @@ -390,7 +390,7 @@ packages: path: ".." relative: true source: path - version: "7.5.28" + version: "7.5.31" leak_tracker: dependency: transitive description: diff --git a/lib/src/table2/src/controller.dart b/lib/src/table2/src/controller.dart index b98c186..dc50536 100644 --- a/lib/src/table2/src/controller.dart +++ b/lib/src/table2/src/controller.dart @@ -28,6 +28,27 @@ class ThemedTable2Controller { } } + void onSort({ + int columnIndex = 0, + bool ascending = true, + }) { + for (var listener in _listeners) { + listener(ThemedTable2OnSortEvent(columnIndex: columnIndex, ascending: ascending)); + } + } + + void search(String search) { + for (var listener in _listeners) { + listener(ThemedTable2SearchEvent(search: search)); + } + } + + void onSearch(String search) { + for (var listener in _listeners) { + listener(ThemedTable2OnSearchEvent(search: search)); + } + } + void refresh() { for (var listener in _listeners) { listener(ThemedTable2RefreshEvent()); diff --git a/lib/src/table2/src/events.dart b/lib/src/table2/src/events.dart index 2080668..7340ce8 100644 --- a/lib/src/table2/src/events.dart +++ b/lib/src/table2/src/events.dart @@ -12,4 +12,30 @@ class ThemedTable2SortEvent extends ThemedTable2Event { }); } +class ThemedTable2OnSortEvent extends ThemedTable2Event { + final int columnIndex; + final bool ascending; + + ThemedTable2OnSortEvent({ + required this.columnIndex, + required this.ascending, + }); +} + +class ThemedTable2SearchEvent extends ThemedTable2Event { + final String search; + + ThemedTable2SearchEvent({ + required this.search, + }); +} + +class ThemedTable2OnSearchEvent extends ThemedTable2Event { + final String search; + + ThemedTable2OnSearchEvent({ + required this.search, + }); +} + class ThemedTable2RefreshEvent extends ThemedTable2Event {} diff --git a/lib/src/table2/src/table.dart b/lib/src/table2/src/table.dart index 389eec5..45d39b2 100644 --- a/lib/src/table2/src/table.dart +++ b/lib/src/table2/src/table.dart @@ -261,6 +261,7 @@ class _ThemedTable2State extends State> { ]; } + widget.controller?.onSearch(_searchController.text); if (_searchController.text.isNotEmpty) { final searchLower = _searchController.text.toLowerCase(); items = items.where((row) { @@ -279,6 +280,7 @@ class _ThemedTable2State extends State> { final sortKeys = [ for (final item in items) _itemsStrings[item.hashCode]?[columnIndex] ?? _colSelected.valueBuilder(item), ]; + widget.controller?.onSort(columnIndex: columnIndex, ascending: !_isReversed); _filteredData.value = await compute( _sort, _SortParams( @@ -334,6 +336,9 @@ class _ThemedTable2State extends State> { } void _onControllerEvent(ThemedTable2Event event) { + /// Handle sort events from the controller: + + /// Sort events are handled by updating the selected column and sort order, then re-filtering and sorting the data. if (event is ThemedTable2SortEvent) { final columnIndex = event.columnIndex; final ascending = event.ascending; @@ -349,10 +354,18 @@ class _ThemedTable2State extends State> { return; } + /// Refresh events are handled by re-filtering and sorting the data. if (event is ThemedTable2RefreshEvent) { _filterAndSort('CONTROLLER_REFRESH'); return; } + + /// Search events are handled by updating the search controller text, which triggers the search listener and re-filters the data. + if (event is ThemedTable2SearchEvent) { + _searchController.text = event.search; + _filterAndSort('CONTROLLER_SEARCH'); + return; + } } @override diff --git a/pubspec.yaml b/pubspec.yaml index 625e675..cb44847 100644 --- a/pubspec.yaml +++ b/pubspec.yaml @@ -1,6 +1,6 @@ name: layrz_theme description: Layrz standard styling library for Flutter. Widget library following the Material Design 3 guidelines, with a focus on reliavility and functionality. -version: "7.5.31" +version: "7.5.32" homepage: https://theme.layrz.com repository: https://github.com/goldenm-software/layrz_theme