首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >如何在PagingController(infinite_scroll_pagination)中处理GetxController?

如何在PagingController(infinite_scroll_pagination)中处理GetxController?
EN

Stack Overflow用户
提问于 2022-07-16 01:35:35
回答 1查看 187关注 0票数 1

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

Getx建议我使用onCloseGetxController方法来完成这个任务。

代码语言:javascript
运行
复制
@override
void onClose() {
  pagingController.dispose();
  super.onClose();
}

他信守诺言,太好了。但没过多久!让我们跳进去;

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

如果我在完成_fetchPage之前离开屏幕,那么未来仍将继续工作。一旦数据被获取,pagingController就会被访问,但是已经被释放了。

最后,打印Unhandled Exception: Exception: A PagingController was used after being disposed.

代码语言:javascript
运行
复制
  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;
    }
  }
EN

回答 1

Stack Overflow用户

发布于 2022-10-19 12:13:20

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

代码语言:javascript
运行
复制
  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;
    }
  }
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/73000965

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档