如何处置PagingController(infinite_scroll_pagination)在GetxControl



我想在离开当前屏幕时释放所有内容。

Getx建议我使用GetxControlleronClose方法。

@override
void onClose() {
pagingController.dispose();
super.onClose();
}
他遵守了他的诺言,太好了。但是没花多长时间!

控制器有一个名为_fetchPage的未来方法,它基本上获取页面数据并与pagingController一起工作

如果我在完成_fetchPage之前离开屏幕,未来仍然工作。一旦数据被取出,pagingController被访问,但它已经被处理了。

最后,输出Unhandled Exception: Exception: A PagingController was used after being disposed.

Future<void> _fetchPage(int pageKey) async {
try {
var skip = pageKey == 0 ? 0 : (10 * pageKey);
var data = await fetchDataOfPage(skip, limit);
final isLastPage = data.length < limit;
if (isLastPage) {
pagingController.appendLastPage(data);
} else {
final nextPageKey = pageKey + 1;
pagingController.appendPage(data, nextPageKey);
}
} catch (error) {
pagingController.error = error;
}
}

我遇到了这个确切的问题,并且能够通过检查小部件在检索数据后仍然挂载来修复它:

Future<void> _fetchPage(int pageKey) async {
try {
var skip = pageKey == 0 ? 0 : (10 * pageKey);
var data = await fetchDataOfPage(skip, limit);
// bail out if widget is no longer mounted
if (!mounted) {
return;
}
final isLastPage = data.length < limit;
if (isLastPage) {
pagingController.appendLastPage(data);
} else {
final nextPageKey = pageKey + 1;
pagingController.appendPage(data, nextPageKey);
}
} catch (error) {
pagingController.error = error;
}
}

最新更新