Flutter学习(七)GetX offAllNamed使用的问题

背景

使用GetX开发应用的时候,也可能有人调用过offAllNamed,会发现所有controller的都被销毁了

环境

win10
getx 4.6.5
as 4+

现象

从A页面,跳转到B页面,然后调用offAllNamed进行回到A页面,观察controller声明周期,发现controller声明周期直接调用到了onClose,这里如果做了一些释放资源的操作,那就直接导致功能使用异常了。

原因

Flutter学习(七)GetX offAllNamed使用的问题_第1张图片
Flutter学习(七)GetX offAllNamed使用的问题_第2张图片
Flutter学习(七)GetX offAllNamed使用的问题_第3张图片
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的。

你可能感兴趣的:(flutter,flutter,学习)