背景
使用GetX开发应用的时候,也可能有人调用过offAllNamed,会发现所有controller的都被销毁了
环境
win10
getx 4.6.5
as 4+
现象
从A页面,跳转到B页面,然后调用offAllNamed进行回到A页面,观察controller声明周期,发现controller声明周期直接调用到了onClose,这里如果做了一些释放资源的操作,那就直接导致功能使用异常了。
原因
offAllNamed会销毁所有controller,除非你的controller是永久的。
解决方法
issues地址:
https://github.com/jonataslaw/getx/issues/1955
推荐解决方式:
方式1:
Get.until((route) => Get.currentRoute == ‘/home’);
注意,这种方式,如果页面不存在,会导致失效,原理是until函数的设计如此。
方式2:
if(Get.isRegistered()){
Get.until((route) => route.settings.name == RouteNames.systemLoginEmail);
}else{
Get.offAllNamed(RouteNames.systemLoginEmail);
}
这个就是外加了一层判断,思想也是基于until的。