From 169b207d9f40e86fd4dc6a06991fe299979a5613 Mon Sep 17 00:00:00 2001 From: MohammadTaha Basiri Date: Thu, 31 Mar 2022 00:25:01 +0430 Subject: [PATCH] D1APP-89 tracking api connected --- lib/services/network/request_helper.dart | 2 + .../home/news/news_details/news_details.dart | 70 +++++++++------- .../news/news_details/news_details_state.dart | 14 +++- .../radar/radar_details/radar_details.dart | 84 ++++++++++--------- .../radar_details/radar_details_state.dart | 14 +++- 5 files changed, 105 insertions(+), 79 deletions(-) diff --git a/lib/services/network/request_helper.dart b/lib/services/network/request_helper.dart index d355237..525622e 100644 --- a/lib/services/network/request_helper.dart +++ b/lib/services/network/request_helper.dart @@ -119,6 +119,8 @@ class RequestHelper { ]); static String mark(int id, String type) => baseUrl + '/$type/$id/mark'; + static String tracking(int id, String type) => + baseUrl + '/$type/$id/tracking'; static String comments(int id, String type) => baseUrl + '/$type/$id/comments'; static String feedback(int id, int commentId, String type) => diff --git a/lib/views/home/news/news_details/news_details.dart b/lib/views/home/news/news_details/news_details.dart index 08d5a11..aede351 100644 --- a/lib/views/home/news/news_details/news_details.dart +++ b/lib/views/home/news/news_details/news_details.dart @@ -38,40 +38,46 @@ class _NewsDetailsState extends State { Widget build(BuildContext context) { return Scaffold( body: Consumer( - 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, - ), - ), - 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, + 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, ), - 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 279bc78..bb6dff6 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,15 +88,21 @@ 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) { _trackingTimerCounter++; }); return; } - //send request - _trackingTimerCounter = 0; + final service = RequestService( + RequestHelper.tracking(currentNews.id, 'news'), + body: { + 'sec': _trackingTimerCounter, + }, + ); + service.put(); } Future getRelatedContents() async { diff --git a/lib/views/home/radar/radar_details/radar_details.dart b/lib/views/home/radar/radar_details/radar_details.dart index d88f98e..f3a4fc3 100644 --- a/lib/views/home/radar/radar_details/radar_details.dart +++ b/lib/views/home/radar/radar_details/radar_details.dart @@ -38,47 +38,53 @@ class _RadarDetailsState extends State { Widget build(BuildContext context) { return Scaffold( body: Consumer( - 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, - ), - ), - 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, + 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, ), - item: state.currentRadar, - onCommentsChanged: (count) { - state.onCommentsChanged(count); - widget.pageData['onCommentsChanged']?.call( - state.currentRadar.id, - count, - ); - }, ), - ), - ], + 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, + 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 37ebb42..b31c6e9 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,15 +121,21 @@ 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) { _trackingTimerCounter++; }); return; } - //send request - _trackingTimerCounter = 0; + final service = RequestService( + RequestHelper.tracking(currentRadar.id, 'radar'), + body: { + 'sec': _trackingTimerCounter, + }, + ); + service.put(); } @override