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,7 +44,9 @@ 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(
ignoring: state.isFetchingNewItem,
child: DidvanPageView(
isRadar: false, isRadar: false,
initialIndex: state.initialIndex, initialIndex: state.initialIndex,
onPageChanged: _onPageChnaged, onPageChanged: _onPageChnaged,
@ -52,6 +54,7 @@ class _NewsDetailsState extends State<NewsDetails> {
items: state.news, items: state.news,
currentIndex: state.currentIndex, currentIndex: state.currentIndex,
), ),
),
if (state.news.isNotEmpty) if (state.news.isNotEmpty)
Positioned( Positioned(
bottom: 0, bottom: 0,

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,7 +44,9 @@ 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(
ignoring: state.isFetchingNewItem,
child: DidvanPageView(
isRadar: true, isRadar: true,
initialIndex: state.initialIndex, initialIndex: state.initialIndex,
onPageChanged: _onPageChanged, onPageChanged: _onPageChanged,
@ -52,6 +54,7 @@ class _RadarDetailsState extends State<RadarDetails> {
items: state.radars, items: state.radars,
currentIndex: state.currentIndex, currentIndex: state.currentIndex,
), ),
),
if (state.radars.isNotEmpty) if (state.radars.isNotEmpty)
Positioned( Positioned(
bottom: 0, bottom: 0,

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'];