From 93bac3a3495e4577688e2f2900b54edeb3ee4b09 Mon Sep 17 00:00:00 2001 From: MohammadTaha Basiri Date: Thu, 28 Apr 2022 13:48:32 +0000 Subject: [PATCH] Dev --- lib/providers/user.dart | 8 ++ lib/services/network/request_helper.dart | 2 +- .../home/news/news_details/news_details.dart | 72 +++++++--------- .../news/news_details/news_details_state.dart | 6 +- .../radar/radar_details/radar_details.dart | 86 +++++++++---------- .../radar_details/radar_details_state.dart | 6 +- .../settings/general_settings/settings.dart | 9 +- lib/views/home/studio/studio.dart | 2 +- lib/views/widgets/didvan/page_view.dart | 58 +++++++++++-- 9 files changed, 146 insertions(+), 103 deletions(-) diff --git a/lib/providers/user.dart b/lib/providers/user.dart index f0341e8..eb29f80 100644 --- a/lib/providers/user.dart +++ b/lib/providers/user.dart @@ -37,6 +37,14 @@ class UserProvider extends CoreProvier { } if (service.isSuccess) { user = User.fromJson(service.result['user']); + await StorageService.setValue( + key: 'notificationTimeRangeStart', + value: service.result['user']['start'], + ); + await StorageService.setValue( + key: 'notificationTimeRangeEnd', + value: service.result['user']['end'], + ); AppInitializer.initializeFirebase().then((_) => _registerFirebaseToken()); _registerFirebaseToken(); return true; diff --git a/lib/services/network/request_helper.dart b/lib/services/network/request_helper.dart index 0170ce6..56ec7da 100644 --- a/lib/services/network/request_helper.dart +++ b/lib/services/network/request_helper.dart @@ -3,7 +3,7 @@ import 'package:didvan/models/requests/radar.dart'; import 'package:didvan/models/requests/studio.dart'; class RequestHelper { - static const String baseUrl = 'https://api.didvan.app'; + static const String baseUrl = 'https://test.api.didvan.app'; static const String _baseUserUrl = baseUrl + '/user'; static const String _baseRadarUrl = baseUrl + '/radar'; static const String _baseNewsUrl = baseUrl + '/news'; diff --git a/lib/views/home/news/news_details/news_details.dart b/lib/views/home/news/news_details/news_details.dart index 3becf7e..0450a2b 100644 --- a/lib/views/home/news/news_details/news_details.dart +++ b/lib/views/home/news/news_details/news_details.dart @@ -38,48 +38,42 @@ class _NewsDetailsState extends State { Widget build(BuildContext context) { return Scaffold( body: Consumer( - builder: (context, state, child) => WillPopScope( - onWillPop: () async { - state.handleTracking(sendRequest: true); - return true; - }, - child: StateHandler( - onRetry: () => state.getNewsDetails(state.currentNews.id), - state: state, - builder: (context, state) => Stack( - children: [ - IgnorePointer( - ignoring: state.isFetchingNewItem, - child: DidvanPageView( - isRadar: false, - initialIndex: state.initialIndex, - onPageChanged: _onPageChnaged, - scrollController: _scrollController, - items: state.news, - currentIndex: state.currentIndex, - onMarkChanged: (id, value) => - widget.pageData['onMarkChanged'](id, value), - ), + builder: (context, state, child) => StateHandler( + onRetry: () => state.getNewsDetails(state.currentNews.id), + state: state, + builder: (context, state) => Stack( + children: [ + IgnorePointer( + ignoring: state.isFetchingNewItem, + child: DidvanPageView( + isRadar: false, + initialIndex: state.initialIndex, + onPageChanged: _onPageChnaged, + scrollController: _scrollController, + items: state.news, + currentIndex: state.currentIndex, + onMarkChanged: (id, value) => + widget.pageData['onMarkChanged'](id, value), ), - Positioned( - bottom: 0, - left: 0, - right: 0, - child: FloatingNavigationBar( - hasUnmarkConfirmation: - widget.pageData['hasUnmarkConfirmation'], - scrollController: _scrollController, - item: state.currentNews, - onCommentsChanged: state.onCommentsChanged, - onMarkChanged: (value) => widget.pageData['onMarkChanged']( - state.currentNews.id, - value, - ), - isRadar: false, + ), + Positioned( + bottom: 0, + left: 0, + right: 0, + child: FloatingNavigationBar( + hasUnmarkConfirmation: + widget.pageData['hasUnmarkConfirmation'], + scrollController: _scrollController, + item: state.currentNews, + onCommentsChanged: state.onCommentsChanged, + onMarkChanged: (value) => widget.pageData['onMarkChanged']( + state.currentNews.id, + value, ), + isRadar: false, ), - ], - ), + ), + ], ), ), ), diff --git a/lib/views/home/news/news_details/news_details_state.dart b/lib/views/home/news/news_details/news_details_state.dart index 8adbb91..da3530c 100644 --- a/lib/views/home/news/news_details/news_details_state.dart +++ b/lib/views/home/news/news_details/news_details_state.dart @@ -32,7 +32,7 @@ class NewsDetailsState extends CoreProvier { } final service = RequestService(RequestHelper.newsDetails(id, args)); await service.httpGet(); - handleTracking(sendRequest: isForward != null); + _handleTracking(sendRequest: isForward != null); if (service.isSuccess) { final result = service.result; final newsItem = NewsDetailsData.fromJson(result['news']); @@ -88,7 +88,7 @@ class NewsDetailsState extends CoreProvier { notifyListeners(); } - Future handleTracking({bool sendRequest = true}) async { + Future _handleTracking({bool sendRequest = true}) async { if (!sendRequest) { _trackingTimerCounter = 0; _trackingTimer = Timer.periodic(const Duration(seconds: 1), (timer) { @@ -103,6 +103,7 @@ class NewsDetailsState extends CoreProvier { }, ); service.put(); + _trackingTimerCounter = 0; } Future getRelatedContents() async { @@ -129,6 +130,7 @@ class NewsDetailsState extends CoreProvier { @override void dispose() { + _handleTracking(sendRequest: true); _trackingTimer.cancel(); super.dispose(); } diff --git a/lib/views/home/radar/radar_details/radar_details.dart b/lib/views/home/radar/radar_details/radar_details.dart index c371e5f..78fb92e 100644 --- a/lib/views/home/radar/radar_details/radar_details.dart +++ b/lib/views/home/radar/radar_details/radar_details.dart @@ -38,55 +38,49 @@ class _RadarDetailsState extends State { Widget build(BuildContext context) { return Scaffold( body: Consumer( - builder: (context, state, child) => WillPopScope( - onWillPop: () async { - state.handleTracking(sendRequest: true); - return true; - }, - child: StateHandler( - onRetry: () => state.getRadarDetails(widget.pageData['id']), - state: state, - builder: (context, state) => Stack( - children: [ - IgnorePointer( - ignoring: state.isFetchingNewItem, - child: DidvanPageView( - isRadar: true, - initialIndex: state.initialIndex, - onPageChanged: _onPageChanged, - scrollController: _scrollController, - items: state.radars, - currentIndex: state.currentIndex, - onMarkChanged: (id, value) => - widget.pageData['onMarkChanged']?.call(id, value), - ), + builder: (context, state, child) => StateHandler( + onRetry: () => state.getRadarDetails(widget.pageData['id']), + state: state, + builder: (context, state) => Stack( + children: [ + IgnorePointer( + ignoring: state.isFetchingNewItem, + child: DidvanPageView( + isRadar: true, + initialIndex: state.initialIndex, + onPageChanged: _onPageChanged, + scrollController: _scrollController, + items: state.radars, + currentIndex: state.currentIndex, + onMarkChanged: (id, value) => + widget.pageData['onMarkChanged']?.call(id, value), ), - Positioned( - bottom: 0, - left: 0, - right: 0, - child: FloatingNavigationBar( - hasUnmarkConfirmation: - widget.pageData['hasUnmarkConfirmation'], - isRadar: true, - scrollController: _scrollController, - onMarkChanged: (value) => - widget.pageData['onMarkChanged']?.call( + ), + Positioned( + bottom: 0, + left: 0, + right: 0, + child: FloatingNavigationBar( + hasUnmarkConfirmation: + widget.pageData['hasUnmarkConfirmation'], + isRadar: true, + scrollController: _scrollController, + onMarkChanged: (value) => + widget.pageData['onMarkChanged']?.call( + state.currentRadar.id, + value, + ), + item: state.currentRadar, + onCommentsChanged: (count) { + state.onCommentsChanged(count); + widget.pageData['onCommentsChanged']?.call( state.currentRadar.id, - value, - ), - item: state.currentRadar, - onCommentsChanged: (count) { - state.onCommentsChanged(count); - widget.pageData['onCommentsChanged']?.call( - state.currentRadar.id, - count, - ); - }, - ), + count, + ); + }, ), - ], - ), + ), + ], ), ), ), diff --git a/lib/views/home/radar/radar_details/radar_details_state.dart b/lib/views/home/radar/radar_details/radar_details_state.dart index 81240a3..5939259 100644 --- a/lib/views/home/radar/radar_details/radar_details_state.dart +++ b/lib/views/home/radar/radar_details/radar_details_state.dart @@ -38,7 +38,7 @@ class RadarDetailsState extends CoreProvier { } final service = RequestService(RequestHelper.radarDetails(id, args)); await service.httpGet(); - handleTracking(sendRequest: isForward != null); + _handleTracking(sendRequest: isForward != null); if (service.isSuccess) { final result = service.result; final radar = RadarDetailsData.fromJson(result['radar']); @@ -121,7 +121,7 @@ class RadarDetailsState extends CoreProvier { notifyListeners(); } - Future handleTracking({bool sendRequest = true}) async { + Future _handleTracking({bool sendRequest = true}) async { if (!sendRequest) { _trackingTimerCounter = 0; _trackingTimer = Timer.periodic(const Duration(seconds: 1), (timer) { @@ -136,10 +136,12 @@ class RadarDetailsState extends CoreProvier { }, ); service.put(); + _trackingTimerCounter = 0; } @override void dispose() { + _handleTracking(sendRequest: true); _trackingTimer.cancel(); super.dispose(); } diff --git a/lib/views/home/settings/general_settings/settings.dart b/lib/views/home/settings/general_settings/settings.dart index 41a9947..5ecbc3d 100644 --- a/lib/views/home/settings/general_settings/settings.dart +++ b/lib/views/home/settings/general_settings/settings.dart @@ -54,12 +54,13 @@ class _GeneralSettingsState extends State { title: 'زمان دریافت اعلان', onTap: () => _pickTimeRange(context), icon: DidvanIcons.notification_regular, - suffix: DateTimeUtils.normalizeTimeDuration( - Duration(minutes: state.notificationTimeRange[1]), - ) + - ' - ' + + suffix: 'از' + DateTimeUtils.normalizeTimeDuration( Duration(minutes: state.notificationTimeRange[0]), + ) + + ' تا ' + + DateTimeUtils.normalizeTimeDuration( + Duration(minutes: state.notificationTimeRange[1]), ), ), ), diff --git a/lib/views/home/studio/studio.dart b/lib/views/home/studio/studio.dart index f437719..e4260d8 100644 --- a/lib/views/home/studio/studio.dart +++ b/lib/views/home/studio/studio.dart @@ -72,7 +72,7 @@ class _StudioState extends State { child: Padding( padding: const EdgeInsets.all(16.0), child: SearchField( - title: 'استودیو', + title: state.videosSelected ? 'ویدئو' : 'پادکست', onChanged: _onChanged, focusNode: _focusNode, ), diff --git a/lib/views/widgets/didvan/page_view.dart b/lib/views/widgets/didvan/page_view.dart index b3c0eb2..881db84 100644 --- a/lib/views/widgets/didvan/page_view.dart +++ b/lib/views/widgets/didvan/page_view.dart @@ -2,6 +2,8 @@ import 'package:carousel_slider/carousel_slider.dart'; import 'package:didvan/config/design_config.dart'; import 'package:didvan/config/theme_data.dart'; import 'package:didvan/constants/app_icons.dart'; +import 'package:didvan/models/requests/news.dart'; +import 'package:didvan/models/requests/radar.dart'; import 'package:didvan/routes/routes.dart'; import 'package:didvan/utils/action_sheet.dart'; import 'package:didvan/utils/date_time.dart'; @@ -195,24 +197,64 @@ class _DidvanPageViewState extends State { data: content.text, onAnchorTap: (href, context, map, element) { if (href!.contains('navigate-')) { - Navigator.of(ActionSheetUtils.context) - .pushNamed(Routes.statisticDetails, arguments: { - 'onMarkChanged': (value) {}, - 'label': href.split('-')[1], - 'title': href.split('-').last, - 'marked': false, - }); + if (href.contains('statistic')) { + Navigator.of(ActionSheetUtils.context) + .pushNamed(Routes.statisticDetails, arguments: { + 'onMarkChanged': (value) {}, + 'label': href.split('-')[2], + 'title': href.split('-').last, + 'marked': false, + }); + } else if (href.contains('radar')) { + Navigator.of(ActionSheetUtils.context).pushNamed( + Routes.radarDetails, + arguments: { + 'onMarkChanged': (id, value) {}, + 'onCommentsChanged': (id, count) {}, + 'id': int.parse(href.split('-').last), + 'args': const RadarRequestArgs(page: 0), + 'hasUnmarkConfirmation': false, + }, + ); + } else if (href.contains('news')) { + Navigator.of(ActionSheetUtils.context).pushNamed( + Routes.newsDetails, + arguments: { + 'onMarkChanged': (id, value) {}, + 'id': int.parse(href.split('-').last), + 'args': const NewsRequestArgs(page: 0), + 'hasUnmarkConfirmation': false, + }, + ); + } } else if (href.contains('popup-')) { showDialog( context: ActionSheetUtils.context, builder: (context) => Dialog( + shape: const RoundedRectangleBorder( + borderRadius: DesignConfig.lowBorderRadius, + ), alignment: Alignment.center, child: DidvanCard( child: Column( mainAxisSize: MainAxisSize.min, children: [ + Row( + children: [ + Icon( + DidvanIcons.info_circle_solid, + color: Theme.of(context).colorScheme.primary, + ), + const SizedBox(width: 8), + DidvanText( + element!.text, + style: Theme.of(context).textTheme.subtitle2, + ), + ], + ), + const SizedBox(height: 8), DidvanText(href.split('-').last), - const DidvanDivider(), + const SizedBox(height: 16), const DidvanButton( title: 'بستن', onPressed: ActionSheetUtils.pop,