在颤振中删除 GetxController 时,定时器永远不会取消
Timer is never cancelled when GetxController is deleted in flutter
假设我有两个屏幕(屏幕 A 和屏幕 B)。我使用以下方法从屏幕 A 导航到 B:
Get.toNamed('/screen_b');
我在屏幕 b 中有一个计时器,它调用函数或打印语句。定时器代码在GetxController里面。
class Controller extends GetxController{
Timer? timer;
@override
void onInit() {
super.onInit();
timer = Timer.periodic(const Duration(seconds: 5), (Timer t) {
print('timer is running');
//DO SOMETHING
});
}
}
@override
void dispose() {
print('I am disposed');
timer!.cancel();
super.dispose();
}
@override
void onClose() {
timer!.cancel();
super.onClose();
print('I am closed');
}
}
我尝试使用 GetxController 提供的 onDispose 和 onClose 方法取消计时器,但看起来计时器从未被取消。当我导航回屏幕 A 时,打印语句 **timer is running**
永远保持 运行 并且该语句打印了 6/7 次。我做错了什么?当我从屏幕 B 返回到屏幕 A 时,Getx 打印以下语句
[GETX] CLOSE TO ROUTE /screen_b
[GETX] "Controller" onDelete() called
[GETX] "Controller" deleted from memory
我确实遇到了和你上次一样的问题,当你已经删除了控制器,但时间仍然 运行 像我一样滴答作响,如果安装了定时器。
ifTimerMounted(){
final itimer = timer == null ? false : timer!.isActive;
if(itimer){
timer!.cancel();
}else{
// Or Do Nothing Leave it Blank
log('Timer Stop Running')
}
}
试着把它放在 onClose
@override
void onClose() {
super.onClose();
ifTimerMounted();
}
在 onInit()
函数上尝试使用这个:
替换 Timer t
-> timer
void onInit() {
super.onInit();
timer = Timer.periodic(const Duration(seconds: 5), (timer) {
print('timer is running');
});
}
}
假设我有两个屏幕(屏幕 A 和屏幕 B)。我使用以下方法从屏幕 A 导航到 B:
Get.toNamed('/screen_b');
我在屏幕 b 中有一个计时器,它调用函数或打印语句。定时器代码在GetxController里面。
class Controller extends GetxController{
Timer? timer;
@override
void onInit() {
super.onInit();
timer = Timer.periodic(const Duration(seconds: 5), (Timer t) {
print('timer is running');
//DO SOMETHING
});
}
}
@override
void dispose() {
print('I am disposed');
timer!.cancel();
super.dispose();
}
@override
void onClose() {
timer!.cancel();
super.onClose();
print('I am closed');
}
}
我尝试使用 GetxController 提供的 onDispose 和 onClose 方法取消计时器,但看起来计时器从未被取消。当我导航回屏幕 A 时,打印语句 **timer is running**
永远保持 运行 并且该语句打印了 6/7 次。我做错了什么?当我从屏幕 B 返回到屏幕 A 时,Getx 打印以下语句
[GETX] CLOSE TO ROUTE /screen_b
[GETX] "Controller" onDelete() called
[GETX] "Controller" deleted from memory
我确实遇到了和你上次一样的问题,当你已经删除了控制器,但时间仍然 运行 像我一样滴答作响,如果安装了定时器。
ifTimerMounted(){
final itimer = timer == null ? false : timer!.isActive;
if(itimer){
timer!.cancel();
}else{
// Or Do Nothing Leave it Blank
log('Timer Stop Running')
}
}
试着把它放在 onClose
@override
void onClose() {
super.onClose();
ifTimerMounted();
}
在 onInit()
函数上尝试使用这个:
替换 Timer t
-> timer
void onInit() {
super.onInit();
timer = Timer.periodic(const Duration(seconds: 5), (timer) {
print('timer is running');
});
}
}