我想在离开当前屏幕时释放所有内容。
Getx建议我使用onClose
的GetxController
方法来完成这个任务。
@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;
}
}
发布于 2022-10-19 12:13:20
我遇到了这个问题,并且能够通过检查小部件在检索数据之后是否仍然挂载来修复它:
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;
}
}
https://stackoverflow.com/questions/73000965
复制相似问题