Fix duplicate items and unmounted pages for pagination
This commit is contained in:
parent
7b68f2303d
commit
c856953f31
|
@ -47,14 +47,23 @@ class _EntriesListViewState extends State<EntriesListView> {
|
|||
sort: sort,
|
||||
);
|
||||
|
||||
// Check BuildContext
|
||||
if (!mounted) return;
|
||||
|
||||
final isLastPage =
|
||||
newPage.pagination.currentPage == newPage.pagination.maxPage;
|
||||
// Prevent duplicates
|
||||
final currentItemIds =
|
||||
_pagingController.itemList?.map((e) => e.entryId) ?? [];
|
||||
final newItems = newPage.items
|
||||
.where((e) => !currentItemIds.contains(e.entryId))
|
||||
.toList();
|
||||
|
||||
if (isLastPage) {
|
||||
_pagingController.appendLastPage(newPage.items);
|
||||
_pagingController.appendLastPage(newItems);
|
||||
} else {
|
||||
final nextPageKey = pageKey + 1;
|
||||
_pagingController.appendPage(newPage.items, nextPageKey);
|
||||
_pagingController.appendPage(newItems, nextPageKey);
|
||||
}
|
||||
} catch (error) {
|
||||
_pagingController.error = error;
|
||||
|
|
|
@ -60,14 +60,23 @@ class _EntryPageState extends State<EntryPage> {
|
|||
sort: commentsSort,
|
||||
);
|
||||
|
||||
// Check BuildContext
|
||||
if (!mounted) return;
|
||||
|
||||
final isLastPage =
|
||||
newPage.pagination.currentPage == newPage.pagination.maxPage;
|
||||
// Prevent duplicates
|
||||
final currentItemIds =
|
||||
_pagingController.itemList?.map((e) => e.commentId) ?? [];
|
||||
final newItems = newPage.items
|
||||
.where((e) => !currentItemIds.contains(e.commentId))
|
||||
.toList();
|
||||
|
||||
if (isLastPage) {
|
||||
_pagingController.appendLastPage(newPage.items);
|
||||
_pagingController.appendLastPage(newItems);
|
||||
} else {
|
||||
final nextPageKey = pageKey + 1;
|
||||
_pagingController.appendPage(newPage.items, nextPageKey);
|
||||
_pagingController.appendPage(newItems, nextPageKey);
|
||||
}
|
||||
} catch (error) {
|
||||
_pagingController.error = error;
|
||||
|
@ -202,8 +211,7 @@ class _EntryPageState extends State<EntryPage> {
|
|||
setState(() {
|
||||
_pagingController.itemList = newList;
|
||||
});
|
||||
},
|
||||
opUserId: widget.initData.user.userId),
|
||||
}, opUserId: widget.initData.user.userId),
|
||||
),
|
||||
),
|
||||
)
|
||||
|
@ -212,4 +220,10 @@ class _EntryPageState extends State<EntryPage> {
|
|||
),
|
||||
);
|
||||
}
|
||||
|
||||
@override
|
||||
void dispose() {
|
||||
_pagingController.dispose();
|
||||
super.dispose();
|
||||
}
|
||||
}
|
||||
|
|
|
@ -42,14 +42,23 @@ class _DomainsScreenState extends State<DomainsScreen> {
|
|||
search: search.isEmpty ? null : search,
|
||||
);
|
||||
|
||||
// Check BuildContext
|
||||
if (!mounted) return;
|
||||
|
||||
final isLastPage =
|
||||
newPage.pagination.currentPage == newPage.pagination.maxPage;
|
||||
// Prevent duplicates
|
||||
final currentItemIds =
|
||||
_pagingController.itemList?.map((e) => e.domainId) ?? [];
|
||||
final newItems = newPage.items
|
||||
.where((e) => !currentItemIds.contains(e.domainId))
|
||||
.toList();
|
||||
|
||||
if (isLastPage) {
|
||||
_pagingController.appendLastPage(newPage.items);
|
||||
_pagingController.appendLastPage(newItems);
|
||||
} else {
|
||||
final nextPageKey = pageKey + 1;
|
||||
_pagingController.appendPage(newPage.items, nextPageKey);
|
||||
_pagingController.appendPage(newItems, nextPageKey);
|
||||
}
|
||||
} catch (error) {
|
||||
_pagingController.error = error;
|
||||
|
|
|
@ -45,14 +45,23 @@ class _MagazinesScreenState extends State<MagazinesScreen> {
|
|||
search: search.isEmpty ? null : search,
|
||||
);
|
||||
|
||||
// Check BuildContext
|
||||
if (!mounted) return;
|
||||
|
||||
final isLastPage =
|
||||
newPage.pagination.currentPage == newPage.pagination.maxPage;
|
||||
// Prevent duplicates
|
||||
final currentItemIds =
|
||||
_pagingController.itemList?.map((e) => e.magazineId) ?? [];
|
||||
final newItems = newPage.items
|
||||
.where((e) => !currentItemIds.contains(e.magazineId))
|
||||
.toList();
|
||||
|
||||
if (isLastPage) {
|
||||
_pagingController.appendLastPage(newPage.items);
|
||||
_pagingController.appendLastPage(newItems);
|
||||
} else {
|
||||
final nextPageKey = pageKey + 1;
|
||||
_pagingController.appendPage(newPage.items, nextPageKey);
|
||||
_pagingController.appendPage(newItems, nextPageKey);
|
||||
}
|
||||
} catch (error) {
|
||||
_pagingController.error = error;
|
||||
|
|
|
@ -41,14 +41,23 @@ class _UsersScreenState extends State<UsersScreen> {
|
|||
filter: filter,
|
||||
);
|
||||
|
||||
// Check BuildContext
|
||||
if (!mounted) return;
|
||||
|
||||
final isLastPage =
|
||||
newPage.pagination.currentPage == newPage.pagination.maxPage;
|
||||
// Prevent duplicates
|
||||
final currentItemIds =
|
||||
_pagingController.itemList?.map((e) => e.userId) ?? [];
|
||||
final newItems = newPage.items
|
||||
.where((e) => !currentItemIds.contains(e.userId))
|
||||
.toList();
|
||||
|
||||
if (isLastPage) {
|
||||
_pagingController.appendLastPage(newPage.items);
|
||||
_pagingController.appendLastPage(newItems);
|
||||
} else {
|
||||
final nextPageKey = pageKey + 1;
|
||||
_pagingController.appendPage(newPage.items, nextPageKey);
|
||||
_pagingController.appendPage(newItems, nextPageKey);
|
||||
}
|
||||
} catch (error) {
|
||||
_pagingController.error = error;
|
||||
|
|
|
@ -60,14 +60,23 @@ class _PostPageState extends State<PostPage> {
|
|||
sort: commentsSort,
|
||||
);
|
||||
|
||||
// Check BuildContext
|
||||
if (!mounted) return;
|
||||
|
||||
final isLastPage =
|
||||
newPage.pagination.currentPage == newPage.pagination.maxPage;
|
||||
// Prevent duplicates
|
||||
final currentItemIds =
|
||||
_pagingController.itemList?.map((e) => e.commentId) ?? [];
|
||||
final newItems = newPage.items
|
||||
.where((e) => !currentItemIds.contains(e.commentId))
|
||||
.toList();
|
||||
|
||||
if (isLastPage) {
|
||||
_pagingController.appendLastPage(newPage.items);
|
||||
_pagingController.appendLastPage(newItems);
|
||||
} else {
|
||||
final nextPageKey = pageKey + 1;
|
||||
_pagingController.appendPage(newPage.items, nextPageKey);
|
||||
_pagingController.appendPage(newItems, nextPageKey);
|
||||
}
|
||||
} catch (error) {
|
||||
_pagingController.error = error;
|
||||
|
@ -198,8 +207,7 @@ class _PostPageState extends State<PostPage> {
|
|||
setState(() {
|
||||
_pagingController.itemList = newList;
|
||||
});
|
||||
},
|
||||
opUserId: widget.initData.user.userId),
|
||||
}, opUserId: widget.initData.user.userId),
|
||||
),
|
||||
),
|
||||
)
|
||||
|
@ -208,4 +216,10 @@ class _PostPageState extends State<PostPage> {
|
|||
),
|
||||
);
|
||||
}
|
||||
|
||||
@override
|
||||
void dispose() {
|
||||
_pagingController.dispose();
|
||||
super.dispose();
|
||||
}
|
||||
}
|
||||
|
|
|
@ -47,14 +47,23 @@ class _PostsListViewState extends State<PostsListView> {
|
|||
sort: sort,
|
||||
);
|
||||
|
||||
// Check BuildContext
|
||||
if (!mounted) return;
|
||||
|
||||
final isLastPage =
|
||||
newPage.pagination.currentPage == newPage.pagination.maxPage;
|
||||
// Prevent duplicates
|
||||
final currentItemIds =
|
||||
_pagingController.itemList?.map((e) => e.postId) ?? [];
|
||||
final newItems = newPage.items
|
||||
.where((e) => !currentItemIds.contains(e.postId))
|
||||
.toList();
|
||||
|
||||
if (isLastPage) {
|
||||
_pagingController.appendLastPage(newPage.items);
|
||||
_pagingController.appendLastPage(newItems);
|
||||
} else {
|
||||
final nextPageKey = pageKey + 1;
|
||||
_pagingController.appendPage(newPage.items, nextPageKey);
|
||||
_pagingController.appendPage(newItems, nextPageKey);
|
||||
}
|
||||
} catch (error) {
|
||||
_pagingController.error = error;
|
||||
|
|
|
@ -37,14 +37,23 @@ class _NotificationsScreenState extends State<NotificationsScreen> {
|
|||
filter: filter,
|
||||
);
|
||||
|
||||
// Check BuildContext
|
||||
if (!mounted) return;
|
||||
|
||||
final isLastPage =
|
||||
newPage.pagination.currentPage == newPage.pagination.maxPage;
|
||||
// Prevent duplicates
|
||||
final currentItemIds =
|
||||
_pagingController.itemList?.map((e) => e.notificationId) ?? [];
|
||||
final newItems = newPage.items
|
||||
.where((e) => !currentItemIds.contains(e.notificationId))
|
||||
.toList();
|
||||
|
||||
if (isLastPage) {
|
||||
_pagingController.appendLastPage(newPage.items);
|
||||
_pagingController.appendLastPage(newItems);
|
||||
} else {
|
||||
final nextPageKey = pageKey + 1;
|
||||
_pagingController.appendPage(newPage.items, nextPageKey);
|
||||
_pagingController.appendPage(newItems, nextPageKey);
|
||||
}
|
||||
} catch (error) {
|
||||
_pagingController.error = error;
|
||||
|
|
Loading…
Reference in New Issue