【发布时间】:2022-10-19 20:13:20
【问题描述】:
我想在离开当前屏幕时释放所有内容。
Getx 建议我为此使用GetxController 的onClose 方法。
@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;
}
}
【问题讨论】:
-
您需要注意的事项很少: 1. 确保您在控制器中拥有所有变量。 2. 如果控制器与路由绑定,则不必实际处置控制器。因此,请确保您已使用 GetPage(name: _Paths.POST_DETAIL, page: () => FeedItemDetail(), binding: SocialFeedBinding(), ) 将绑定与路由绑定。所以当页面弹出时,所有控制器数据都将被删除
-
pagingController 在控制器中定义并与 Binding 绑定。我可以看到控制器的生命周期日志。但
infinite_scroll_paginationdocs 尤其强调使用 dispose 方法。
标签: flutter flutter-getx