@@ -261,6 +261,7 @@ class _ThemedTable2State<T> extends State<ThemedTable2<T>> {
261261 ];
262262 }
263263
264+ widget.controller? .onSearch (_searchController.text);
264265 if (_searchController.text.isNotEmpty) {
265266 final searchLower = _searchController.text.toLowerCase ();
266267 items = items.where ((row) {
@@ -279,6 +280,7 @@ class _ThemedTable2State<T> extends State<ThemedTable2<T>> {
279280 final sortKeys = [
280281 for (final item in items) _itemsStrings[item.hashCode]? [columnIndex] ?? _colSelected.valueBuilder (item),
281282 ];
283+ widget.controller? .onSort (columnIndex: columnIndex, ascending: ! _isReversed);
282284 _filteredData.value = await compute (
283285 _sort,
284286 _SortParams <T >(
@@ -334,6 +336,9 @@ class _ThemedTable2State<T> extends State<ThemedTable2<T>> {
334336 }
335337
336338 void _onControllerEvent (ThemedTable2Event event) {
339+ /// Handle sort events from the controller:
340+
341+ /// Sort events are handled by updating the selected column and sort order, then re-filtering and sorting the data.
337342 if (event is ThemedTable2SortEvent <T >) {
338343 final columnIndex = event.columnIndex;
339344 final ascending = event.ascending;
@@ -349,10 +354,18 @@ class _ThemedTable2State<T> extends State<ThemedTable2<T>> {
349354 return ;
350355 }
351356
357+ /// Refresh events are handled by re-filtering and sorting the data.
352358 if (event is ThemedTable2RefreshEvent <T >) {
353359 _filterAndSort ('CONTROLLER_REFRESH' );
354360 return ;
355361 }
362+
363+ /// Search events are handled by updating the search controller text, which triggers the search listener and re-filters the data.
364+ if (event is ThemedTable2SearchEvent <T >) {
365+ _searchController.text = event.search;
366+ _filterAndSort ('CONTROLLER_SEARCH' );
367+ return ;
368+ }
356369 }
357370
358371 @override
0 commit comments