Flutter GetX 状态管理在BottomSheet中Controller未销毁问题定位

本文分析了在使用Flutter GetX进行状态管理时,BottomSheet中的Controller未被销毁的问题。通过研究代码,发现GetModalBottomSheetRoute在dispose时没有正确清理Controller。而GetDialogRoute和GetPageRoute在dispose时进行了清理。为了解决这个问题,文章建议使用GetX代替Obx,并确保设置global为false。
摘要由CSDN通过智能技术生成

在BottomSheet中使用Obx方式做状态管理,发现Controller未销毁掉。

return Obx(() {
      return PageStateManager(
        () {
          return getContent(context);
        },
        state.loadState.value,
        errorCode: state.errorCode.value,
        errorMsg: state.errorMsg.value,
        onRetryTap: state.onRetryTap,
      );
    });

分析代码发现Get.put的时候,主要是把Controller存在GetInstance的_singl Map中,如果controller没被移除,应该是delete方法没被调用。

查看get_navigation中src/bottomsheet/bottomsheet.dart代码,发现GetModalBottomSheetRoute在dispose中并没有做任何操作。

而src/dialog/dialog_route.dart代码中,GetDialogRoute重写了dispose,调用了GetInstance().removeDependencyByRoute进而调用了delete。

src/routes/d

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值