From e5bae19f14b267471b8127c4d0f4a29a33dec33d Mon Sep 17 00:00:00 2001 From: MohammadTaha Basiri Date: Sun, 6 Feb 2022 11:45:27 +0330 Subject: [PATCH] pageview backwarding bug fixed --- .../home/news/news_details/news_details.dart | 17 ++++++++++------- .../news/news_details/news_details_state.dart | 12 ++++++++++-- .../home/radar/radar_details/radar_details.dart | 17 ++++++++++------- .../radar_details/radar_details_state.dart | 12 ++++++++++-- 4 files changed, 40 insertions(+), 18 deletions(-) diff --git a/lib/pages/home/news/news_details/news_details.dart b/lib/pages/home/news/news_details/news_details.dart index ddff4cd..3604be9 100644 --- a/lib/pages/home/news/news_details/news_details.dart +++ b/lib/pages/home/news/news_details/news_details.dart @@ -44,13 +44,16 @@ class _NewsDetailsState extends State { builder: (context, state) => Stack( children: [ if (state.news.isNotEmpty) - DidvanPageView( - isRadar: false, - initialIndex: state.initialIndex, - onPageChanged: _onPageChnaged, - scrollController: _scrollController, - items: state.news, - currentIndex: state.currentIndex, + IgnorePointer( + ignoring: state.isFetchingNewItem, + child: DidvanPageView( + isRadar: false, + initialIndex: state.initialIndex, + onPageChanged: _onPageChnaged, + scrollController: _scrollController, + items: state.news, + currentIndex: state.currentIndex, + ), ), if (state.news.isNotEmpty) Positioned( diff --git a/lib/pages/home/news/news_details/news_details_state.dart b/lib/pages/home/news/news_details/news_details_state.dart index ece6105..b9ac878 100644 --- a/lib/pages/home/news/news_details/news_details_state.dart +++ b/lib/pages/home/news/news_details/news_details_state.dart @@ -15,6 +15,7 @@ class NewsDetailsState extends CoreProvier { late final NewsRequestArgs args; late Timer _trackingTimer; int _trackingTimerCounter = 0; + bool isFetchingNewItem = false; final List relatedQueue = []; int _currentIndex = 0; @@ -25,6 +26,9 @@ class NewsDetailsState extends CoreProvier { Future getNewsDetails(int id, {bool? isForward}) async { if (isForward == null) { appState = AppState.busy; + } else { + isFetchingNewItem = true; + notifyListeners(); } final service = RequestService(RequestHelper.newsDetails(id, args)); await service.httpGet(); @@ -67,6 +71,7 @@ class NewsDetailsState extends CoreProvier { } _currentIndex--; } + isFetchingNewItem = false; appState = AppState.idle; return; } @@ -97,8 +102,11 @@ class NewsDetailsState extends CoreProvier { Future getRelatedContents() async { if (currentNews.relatedContents.isNotEmpty) return; relatedQueue.add(currentNews.id); - final service = RequestService( - RequestHelper.tag(currentNews.tags.map((tag) => tag.id).toList())); + final service = RequestService(RequestHelper.tag( + ids: currentNews.tags.map((tag) => tag.id).toList(), + itemId: currentNews.id, + type: 'news', + )); await service.httpGet(); if (service.isSuccess) { final relateds = service.result['contents']; diff --git a/lib/pages/home/radar/radar_details/radar_details.dart b/lib/pages/home/radar/radar_details/radar_details.dart index 010cabe..6677c3e 100644 --- a/lib/pages/home/radar/radar_details/radar_details.dart +++ b/lib/pages/home/radar/radar_details/radar_details.dart @@ -44,13 +44,16 @@ class _RadarDetailsState extends State { builder: (context, state) => Stack( children: [ if (state.radars.isNotEmpty) - DidvanPageView( - isRadar: true, - initialIndex: state.initialIndex, - onPageChanged: _onPageChanged, - scrollController: _scrollController, - items: state.radars, - currentIndex: state.currentIndex, + IgnorePointer( + ignoring: state.isFetchingNewItem, + child: DidvanPageView( + isRadar: true, + initialIndex: state.initialIndex, + onPageChanged: _onPageChanged, + scrollController: _scrollController, + items: state.radars, + currentIndex: state.currentIndex, + ), ), if (state.radars.isNotEmpty) Positioned( diff --git a/lib/pages/home/radar/radar_details/radar_details_state.dart b/lib/pages/home/radar/radar_details/radar_details_state.dart index 5d9a439..ed210be 100644 --- a/lib/pages/home/radar/radar_details/radar_details_state.dart +++ b/lib/pages/home/radar/radar_details/radar_details_state.dart @@ -15,6 +15,7 @@ class RadarDetailsState extends CoreProvier { int _trackingTimerCounter = 0; late final int initialIndex; late final RadarRequestArgs args; + bool isFetchingNewItem = false; final List relatedQueue = []; int _currentIndex = 0; @@ -31,6 +32,9 @@ class RadarDetailsState extends CoreProvier { Future getRadarDetails(int id, {bool? isForward}) async { if (isForward == null) { appState = AppState.busy; + } else { + isFetchingNewItem = true; + notifyListeners(); } final service = RequestService(RequestHelper.radarDetails(id, args)); await service.httpGet(); @@ -76,6 +80,7 @@ class RadarDetailsState extends CoreProvier { } _currentIndex--; } + isFetchingNewItem = false; appState = AppState.idle; return; } @@ -88,8 +93,11 @@ class RadarDetailsState extends CoreProvier { Future getRelatedContents() async { if (currentRadar.relatedContents.isNotEmpty) return; relatedQueue.add(currentRadar.id); - final service = RequestService( - RequestHelper.tag(currentRadar.tags.map((tag) => tag.id).toList())); + final service = RequestService(RequestHelper.tag( + ids: currentRadar.tags.map((tag) => tag.id).toList(), + itemId: currentRadar.id, + type: 'news', + )); await service.httpGet(); if (service.isSuccess) { final relateds = service.result['contents'];