pageview backwarding bug fixed

This commit is contained in:
MohammadTaha Basiri 2022-02-06 11:45:27 +03:30
parent 085ee82c4b
commit e5bae19f14
4 changed files with 40 additions and 18 deletions

View File

@ -44,13 +44,16 @@ class _NewsDetailsState extends State<NewsDetails> {
builder: (context, state) => Stack( builder: (context, state) => Stack(
children: [ children: [
if (state.news.isNotEmpty) if (state.news.isNotEmpty)
DidvanPageView( IgnorePointer(
isRadar: false, ignoring: state.isFetchingNewItem,
initialIndex: state.initialIndex, child: DidvanPageView(
onPageChanged: _onPageChnaged, isRadar: false,
scrollController: _scrollController, initialIndex: state.initialIndex,
items: state.news, onPageChanged: _onPageChnaged,
currentIndex: state.currentIndex, scrollController: _scrollController,
items: state.news,
currentIndex: state.currentIndex,
),
), ),
if (state.news.isNotEmpty) if (state.news.isNotEmpty)
Positioned( Positioned(

View File

@ -15,6 +15,7 @@ class NewsDetailsState extends CoreProvier {
late final NewsRequestArgs args; late final NewsRequestArgs args;
late Timer _trackingTimer; late Timer _trackingTimer;
int _trackingTimerCounter = 0; int _trackingTimerCounter = 0;
bool isFetchingNewItem = false;
final List<int> relatedQueue = []; final List<int> relatedQueue = [];
int _currentIndex = 0; int _currentIndex = 0;
@ -25,6 +26,9 @@ class NewsDetailsState extends CoreProvier {
Future<void> getNewsDetails(int id, {bool? isForward}) async { Future<void> getNewsDetails(int id, {bool? isForward}) async {
if (isForward == null) { if (isForward == null) {
appState = AppState.busy; appState = AppState.busy;
} else {
isFetchingNewItem = true;
notifyListeners();
} }
final service = RequestService(RequestHelper.newsDetails(id, args)); final service = RequestService(RequestHelper.newsDetails(id, args));
await service.httpGet(); await service.httpGet();
@ -67,6 +71,7 @@ class NewsDetailsState extends CoreProvier {
} }
_currentIndex--; _currentIndex--;
} }
isFetchingNewItem = false;
appState = AppState.idle; appState = AppState.idle;
return; return;
} }
@ -97,8 +102,11 @@ class NewsDetailsState extends CoreProvier {
Future<void> getRelatedContents() async { Future<void> getRelatedContents() async {
if (currentNews.relatedContents.isNotEmpty) return; if (currentNews.relatedContents.isNotEmpty) return;
relatedQueue.add(currentNews.id); relatedQueue.add(currentNews.id);
final service = RequestService( final service = RequestService(RequestHelper.tag(
RequestHelper.tag(currentNews.tags.map((tag) => tag.id).toList())); ids: currentNews.tags.map((tag) => tag.id).toList(),
itemId: currentNews.id,
type: 'news',
));
await service.httpGet(); await service.httpGet();
if (service.isSuccess) { if (service.isSuccess) {
final relateds = service.result['contents']; final relateds = service.result['contents'];

View File

@ -44,13 +44,16 @@ class _RadarDetailsState extends State<RadarDetails> {
builder: (context, state) => Stack( builder: (context, state) => Stack(
children: [ children: [
if (state.radars.isNotEmpty) if (state.radars.isNotEmpty)
DidvanPageView( IgnorePointer(
isRadar: true, ignoring: state.isFetchingNewItem,
initialIndex: state.initialIndex, child: DidvanPageView(
onPageChanged: _onPageChanged, isRadar: true,
scrollController: _scrollController, initialIndex: state.initialIndex,
items: state.radars, onPageChanged: _onPageChanged,
currentIndex: state.currentIndex, scrollController: _scrollController,
items: state.radars,
currentIndex: state.currentIndex,
),
), ),
if (state.radars.isNotEmpty) if (state.radars.isNotEmpty)
Positioned( Positioned(

View File

@ -15,6 +15,7 @@ class RadarDetailsState extends CoreProvier {
int _trackingTimerCounter = 0; int _trackingTimerCounter = 0;
late final int initialIndex; late final int initialIndex;
late final RadarRequestArgs args; late final RadarRequestArgs args;
bool isFetchingNewItem = false;
final List<int> relatedQueue = []; final List<int> relatedQueue = [];
int _currentIndex = 0; int _currentIndex = 0;
@ -31,6 +32,9 @@ class RadarDetailsState extends CoreProvier {
Future<void> getRadarDetails(int id, {bool? isForward}) async { Future<void> getRadarDetails(int id, {bool? isForward}) async {
if (isForward == null) { if (isForward == null) {
appState = AppState.busy; appState = AppState.busy;
} else {
isFetchingNewItem = true;
notifyListeners();
} }
final service = RequestService(RequestHelper.radarDetails(id, args)); final service = RequestService(RequestHelper.radarDetails(id, args));
await service.httpGet(); await service.httpGet();
@ -76,6 +80,7 @@ class RadarDetailsState extends CoreProvier {
} }
_currentIndex--; _currentIndex--;
} }
isFetchingNewItem = false;
appState = AppState.idle; appState = AppState.idle;
return; return;
} }
@ -88,8 +93,11 @@ class RadarDetailsState extends CoreProvier {
Future<void> getRelatedContents() async { Future<void> getRelatedContents() async {
if (currentRadar.relatedContents.isNotEmpty) return; if (currentRadar.relatedContents.isNotEmpty) return;
relatedQueue.add(currentRadar.id); relatedQueue.add(currentRadar.id);
final service = RequestService( final service = RequestService(RequestHelper.tag(
RequestHelper.tag(currentRadar.tags.map((tag) => tag.id).toList())); ids: currentRadar.tags.map((tag) => tag.id).toList(),
itemId: currentRadar.id,
type: 'news',
));
await service.httpGet(); await service.httpGet();
if (service.isSuccess) { if (service.isSuccess) {
final relateds = service.result['contents']; final relateds = service.result['contents'];