【问题标题】:Flutter - How to use mounted in GetXFlutter - 如何使用 mounted in GetX
【发布时间】:2022-12-14 10:47:41
【问题描述】:

我在GetXController发起网络请求,网络回调后判断这个controller/这个页面是否dealloc。如果未释放此页面,请更新页面。如果这个页面被释放,我不会注意到。据我所知,我可以在 flutter origin 中编写以下代码:

if (mounted) {
   // update page
   setState({
   });
}

所以我的问题是如何在 GetX 控制器中编写?

【问题讨论】:

  • 您可以使用反应对象来处理这种情况......此外,您可以覆盖 dispose 方法并可以调用 your_controller.dispose() 来处理未安装的控制器。还有一个技巧是在处理控制器时取消网络请求。
  • 你可以使用 isClosed

标签: android ios flutter dart flutter-getx


【解决方案1】:

mounted 只能在 Stateful widgets 内部调用,所以你不能在 Controller 内部使用它。

如果您使用的是命名路由,我认为您可以获取页面的当前名称并做一些事情。

if(Get.routing.current == "/home"){
   doSomething();
}

【讨论】:

    【解决方案2】:

    mounted bool 仅适用于StateFulWidget,我可以考虑将其作为Stream<bool>传递给控制器​​,然后使用它,,这不是理想的解决方案,而且可能会出现很多问题。

    另一方面,您可以在调用该方法之前检查mounted,如下所示:

       // ....
       onPressed: () {
          if (mounted) {
            controller.sendRequest();
          }
        },
        // ....
    

    【讨论】:

      【解决方案3】:

      GetxController中有一个名为isClosed的属性 所以你可以用它代替mounted

      class MyController extends GetxController{
      ...
        fun() {
          // some code
          if(this.isClosed) return;
          // code that you want not execute it
        }
      ...
      }
      

      【讨论】:

        猜你喜欢
        • 2021-03-06
        • 2021-05-03
        • 2021-04-06
        • 2022-08-04
        • 2021-11-11
        • 2021-07-06
        • 2021-06-22
        • 1970-01-01
        • 2022-08-05
        相关资源
        最近更新 更多