From c07551c826498c0936a995011d6d89c88905b09a Mon Sep 17 00:00:00 2001 From: Herwig Birke Date: Fri, 15 Nov 2024 23:02:56 +0100 Subject: [PATCH] filter_box --- lib/widgets/movies/list_screen.dart | 42 ++++++---- lib/widgets/tvshows/list_screen.dart | 111 +++++++++++++++++++-------- 2 files changed, 108 insertions(+), 45 deletions(-) diff --git a/lib/widgets/movies/list_screen.dart b/lib/widgets/movies/list_screen.dart index fe27169..6b0c8d0 100644 --- a/lib/widgets/movies/list_screen.dart +++ b/lib/widgets/movies/list_screen.dart @@ -197,28 +197,43 @@ class _MoviesScreenState extends State { } void setFilter(String text, bool showInit, bool showProg, bool showDone) { -// movieDataSource.clearFilters(); + movieDataSource.clearFilters(); if (showInit) movieDataSource.addFilter( - 'state', FilterCondition(type: FilterType.equals, value: 1)); - else - movieDataSource.removeFilter( - 'state', FilterCondition(type: FilterType.equals, value: 1)); + 'state', + FilterCondition( + type: FilterType.equals, + value: 1, + filterOperator: FilterOperator.or), + ); if (showProg) movieDataSource.addFilter( - 'state', FilterCondition(type: FilterType.equals, value: 2)); - else - movieDataSource.removeFilter( - 'state', FilterCondition(type: FilterType.equals, value: 2)); + 'state', + FilterCondition( + type: FilterType.equals, + value: 2, + filterOperator: FilterOperator.or, + )); if (showDone) movieDataSource.addFilter( - 'state', FilterCondition(type: FilterType.equals, value: 3)); - else - movieDataSource.removeFilter( - 'state', FilterCondition(type: FilterType.equals, value: 3)); + 'state', + FilterCondition( + type: FilterType.equals, + value: 3, + filterOperator: FilterOperator.or, + )); + + movieDataSource.addFilter( + 'movieTitle', + FilterCondition( + type: FilterType.beginsWith, + value: text, + filterOperator: FilterOperator.and, + filterBehavior: FilterBehavior.stringDataType, + )); } @override @@ -237,7 +252,6 @@ class _MoviesScreenState extends State { headerColor: Color(0xff009889), ), child: SfDataGrid( - allowFiltering: true, source: movieDataSource, selectionMode: SelectionMode.single, navigationMode: GridNavigationMode.row, diff --git a/lib/widgets/tvshows/list_screen.dart b/lib/widgets/tvshows/list_screen.dart index 3c90f19..deb7154 100644 --- a/lib/widgets/tvshows/list_screen.dart +++ b/lib/widgets/tvshows/list_screen.dart @@ -1,5 +1,6 @@ import 'dart:convert'; import 'package:multimedia/widgets/tvshows/details/details_screen.dart'; +import 'package:multimedia/widgets/tvshows/filter_box.dart'; import 'package:shared_preferences/shared_preferences.dart'; import 'package:intl/intl.dart'; @@ -287,7 +288,7 @@ class _TVShowsScreenState extends State { ...setSeasonData(maxSeason, e.seasonStatus), ]); - for (int i = 0;i < _columns.length;i++) { + for (int i = 0; i < _columns.length; i++) { tvshowDataSource.updateDataGridSource( rowColumnIndex: RowColumnIndex(index, i)); } @@ -295,6 +296,46 @@ class _TVShowsScreenState extends State { } } + void setFilter(String text, bool showInit, bool showProg, bool showDone) { + tvshowDataSource.clearFilters(); + + if (showInit) + tvshowDataSource.addFilter( + 'seriesState', + FilterCondition( + type: FilterType.equals, + value: 1, + filterOperator: FilterOperator.or), + ); + + if (showProg) + tvshowDataSource.addFilter( + 'seriesState', + FilterCondition( + type: FilterType.equals, + value: 2, + filterOperator: FilterOperator.or, + )); + + if (showDone) + tvshowDataSource.addFilter( + 'seriesState', + FilterCondition( + type: FilterType.equals, + value: 3, + filterOperator: FilterOperator.or, + )); + + tvshowDataSource.addFilter( + 'seriesName', + FilterCondition( + type: FilterType.beginsWith, + value: text, + filterOperator: FilterOperator.and, + filterBehavior: FilterBehavior.stringDataType, + )); + } + @override Widget build(BuildContext context) { return Scaffold( @@ -302,36 +343,44 @@ class _TVShowsScreenState extends State { future: generateTVShowList(), builder: (context, data) { return data.hasData - ? SfDataGridTheme( - data: const SfDataGridThemeData( - headerColor: Color(0xff009889), - ), - child: SfDataGrid( - source: tvshowDataSource, - selectionMode: SelectionMode.single, - navigationMode: GridNavigationMode.row, - columns: _columns, - controller: _dataGridController, - columnWidthMode: ColumnWidthMode.auto, - columnWidthCalculationRange: - ColumnWidthCalculationRange.allRows, - onCellTap: (DataGridCellTapDetails details) { - int index = details.rowColumnIndex.rowIndex - 1; - if (index < 0) { - return; - } - showTVShowDetails(index); - }, - onCellDoubleTap: (DataGridCellDoubleTapDetails details) { - print(details.rowColumnIndex); - }, - onCellLongPress: (DataGridCellLongPressDetails details) { - print(details.rowColumnIndex); - }, - onCellSecondaryTap: (DataGridCellTapDetails details) { - print(details.rowColumnIndex); - }, - ), + ? Column( + children: [ + TVShowFilterBox(setFilter: setFilter), + Expanded( + child: SfDataGridTheme( + data: const SfDataGridThemeData( + headerColor: Color(0xff009889), + ), + child: SfDataGrid( + source: tvshowDataSource, + selectionMode: SelectionMode.single, + navigationMode: GridNavigationMode.row, + columns: _columns, + controller: _dataGridController, + columnWidthMode: ColumnWidthMode.auto, + columnWidthCalculationRange: + ColumnWidthCalculationRange.allRows, + onCellTap: (DataGridCellTapDetails details) { + int index = details.rowColumnIndex.rowIndex - 1; + if (index < 0) { + return; + } + showTVShowDetails(index); + }, + onCellDoubleTap: + (DataGridCellDoubleTapDetails details) { + print(details.rowColumnIndex); + }, + onCellLongPress: + (DataGridCellLongPressDetails details) { + print(details.rowColumnIndex); + }, + onCellSecondaryTap: (DataGridCellTapDetails details) { + print(details.rowColumnIndex); + }, + ), + )), + ], ) : const Center( child: CircularProgressIndicator(