【问题标题】:How To Dispose PagingController(infinite_scroll_pagination) In GetxController?如何在 GetxController 中处理 PagingController(infinite_scroll_pagination)?
【发布时间】:2022-10-19 20:13:20
【问题描述】:

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

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;
    }
  }

【问题讨论】:

  • 您需要注意的事项很少: 1. 确保您在控制器中拥有所有变量。 2. 如果控制器与路由绑定,则不必实际处置控制器。因此,请确保您已使用 GetPage(name: _Paths.POST_DETAIL, page: () => FeedItemDetail(), binding: SocialFeedBinding(), ) 将绑定与路由绑定。所以当页面弹出时,所有控制器数据都将被删除
  • pagingController 在控制器中定义并与 Binding 绑定。我可以看到控制器的生命周期日志。但infinite_scroll_pagination docs 尤其强调使用 dispose 方法。

标签: flutter flutter-getx


【解决方案1】:

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

  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;
    }
  }

【讨论】:

    猜你喜欢
    • 2021-07-04
    • 2021-08-22
    • 2021-02-25
    • 2021-11-13
    • 1970-01-01
    • 2021-08-23
    • 2021-11-19
    • 1970-01-01
    • 2021-12-24
    相关资源
    最近更新 更多