diff --git a/lib/models/requests/studio.dart b/lib/models/requests/studio.dart index 221ea0a..53a8dd4 100644 --- a/lib/models/requests/studio.dart +++ b/lib/models/requests/studio.dart @@ -4,6 +4,8 @@ class StudioRequestArgs { final String? order; final String? type; final bool? asc; + final String? startDate; + final String? endDate; const StudioRequestArgs({ required this.page, @@ -11,5 +13,7 @@ class StudioRequestArgs { this.search, this.order, this.type, + this.startDate, + this.endDate, }); } diff --git a/lib/providers/user.dart b/lib/providers/user.dart index 4e0ebee..30508f9 100644 --- a/lib/providers/user.dart +++ b/lib/providers/user.dart @@ -15,6 +15,9 @@ class UserProvider extends CoreProvier { int _unreadMessageCount = 0; set unreadMessageCount(int value) { + if (value < 0) { + return; + } _unreadMessageCount = value; notifyListeners(); } diff --git a/lib/services/network/request_helper.dart b/lib/services/network/request_helper.dart index e964e1e..caa7d33 100644 --- a/lib/services/network/request_helper.dart +++ b/lib/services/network/request_helper.dart @@ -97,6 +97,8 @@ class RequestHelper { MapEntry('order', args.order), MapEntry('search', args.search), MapEntry('asc', args.asc), + MapEntry('start', args.startDate), + MapEntry('end', args.endDate), ])}'; static String studioOverviews({required StudioRequestArgs args}) => _baseStudioUrl + @@ -106,6 +108,8 @@ class RequestHelper { MapEntry('order', args.order), MapEntry('search', args.search), MapEntry('asc', args.asc), + MapEntry('start', args.startDate), + MapEntry('end', args.endDate), ]); static String statisticOverviews(int? category) => diff --git a/lib/views/home/studio/studio.dart b/lib/views/home/studio/studio.dart index 20c825d..f31294b 100644 --- a/lib/views/home/studio/studio.dart +++ b/lib/views/home/studio/studio.dart @@ -10,11 +10,13 @@ import 'package:didvan/utils/action_sheet.dart'; import 'package:didvan/views/home/studio/studio_state.dart'; import 'package:didvan/views/home/studio/widgets/slider.dart'; import 'package:didvan/views/home/studio/widgets/tab_bar.dart'; +import 'package:didvan/views/home/widgets/date_picker_button.dart'; import 'package:didvan/views/home/widgets/logo_app_bar.dart'; import 'package:didvan/views/home/widgets/overview/podcast.dart'; import 'package:didvan/views/home/widgets/overview/video.dart'; import 'package:didvan/views/home/widgets/search_field.dart'; import 'package:didvan/views/widgets/animated_visibility.dart'; +import 'package:didvan/views/widgets/didvan/checkbox.dart'; import 'package:didvan/views/widgets/didvan/divider.dart'; import 'package:didvan/views/widgets/didvan/icon_button.dart'; import 'package:didvan/views/widgets/didvan/radial_button.dart'; @@ -75,6 +77,8 @@ class _StudioState extends State { title: state.videosSelected ? 'ویدئو' : 'پادکست', onChanged: _onChanged, focusNode: _focusNode, + isFiltered: false, + onFilterButtonPressed: _showFilterBottomSheet, ), ), ), @@ -224,4 +228,49 @@ class _StudioState extends State { ), ); } + + Future _showFilterBottomSheet() async { + final state = context.read(); + await ActionSheetUtils.showBottomSheet( + data: ActionSheetData( + title: 'فیلتر جستجو', + smallDismissButton: true, + titleIcon: DidvanIcons.filter_regular, + dismissTitle: 'حذف فیلتر', + confrimTitle: 'نمایش نتایج', + onDismissed: () => state.resetFilters(false), + onConfirmed: () => state.getStudios(page: 1), + content: Column( + crossAxisAlignment: CrossAxisAlignment.start, + children: [ + ItemTitle( + title: 'تاریخ رادار', + style: Theme.of(context).textTheme.bodyText2, + icon: DidvanIcons.calendar_range_regular, + ), + const SizedBox(height: 8), + StatefulBuilder( + builder: (context, setState) => Row( + children: [ + DatePickerButton( + initialValue: state.startDate?.toString(), + emptyText: 'از تاریخ', + onPicked: (date) => setState(() => state.startDate = date), + lastDate: state.endDate, + ), + const SizedBox(width: 8), + DatePickerButton( + initialValue: state.endDate, + emptyText: 'تا تاریخ', + onPicked: (date) => setState(() => state.endDate = date), + firstDate: state.startDate, + ), + ], + ), + ), + ], + ), + ), + ); + } } diff --git a/lib/views/home/studio/studio_state.dart b/lib/views/home/studio/studio_state.dart index 2ae68f1..d5c003c 100644 --- a/lib/views/home/studio/studio_state.dart +++ b/lib/views/home/studio/studio_state.dart @@ -12,6 +12,9 @@ class StudioState extends CoreProvier { final List studios = []; final List sliders = []; + String? startDate; + String? endDate; + String search = ''; String lastSearch = ''; int page = 1; @@ -25,6 +28,16 @@ class StudioState extends CoreProvier { bool get searching => search.isNotEmpty; + void resetFilters(bool isInit) { + startDate = null; + endDate = null; + search = ''; + lastSearch = ''; + if (!isInit) { + getStudios(page: 1); + } + } + set videosSelected(bool value) { if (_videosSelected == value || appState == AppState.busy) return; _videosSelected = value; @@ -91,6 +104,8 @@ class StudioState extends CoreProvier { search: search, order: order, asc: selectedSortTypeIndex == 1, + endDate: endDate?.split(' ').first, + startDate: startDate?.split(' ').first, ), ), ); diff --git a/lib/views/home/widgets/audio/audio_player_widget.dart b/lib/views/home/widgets/audio/audio_player_widget.dart index a86ff33..fd9c772 100644 --- a/lib/views/home/widgets/audio/audio_player_widget.dart +++ b/lib/views/home/widgets/audio/audio_player_widget.dart @@ -87,7 +87,7 @@ class AudioPlayerWidget extends StatelessWidget { DidvanText( state.stopOnPodcastEnds ? 'پایان پادکست' - : '\'' + state.timerValue.toString(), + : '\'${state.timerValue}', isEnglishFont: true, style: Theme.of(context).textTheme.overline, color: Theme.of(context).colorScheme.title, @@ -293,7 +293,7 @@ class AudioPlayerWidget extends StatelessWidget { (timer) { timerValue--; if (timerValue == 0) { - MediaService.audioPlayer.stop(); + MediaService.audioPlayer.pause(); state.stopOnPodcastEnds = false; state.timer?.cancel(); state.timer = null;