Flutter Timer的基本使用与取消
2023-10-29 03:44:57
Flutter Timer是一个非常有用的类,它可以让我们在指定的时间间隔后执行指定的代码。它在许多场景中都有着广泛的应用,比如计时器、倒计时、轮询等。
基本使用
使用Flutter Timer非常简单,只需要创建一个Timer对象,并传入两个参数:
- duration: 执行代码的时间间隔。
- callback: 执行的代码。
Timer timer = new Timer(const Duration(seconds: 1), () {
print("Hello, world!");
});
上面的代码会在1秒后执行print("Hello, world!")。
取消Timer
在某些情况下,我们需要取消Timer。比如,当页面销毁或应用进入后台时,如果我们不取消Timer,它可能会继续执行,从而导致问题。
我们可以使用Timer的cancel方法来取消Timer。
timer.cancel();
常见场景下的取消Timer
1. 返回到上一个页面时没有销毁Timer
在Flutter中,当我们使用Navigator.push()方法打开一个新页面时,旧页面并不会被销毁,它只是被隐藏了。因此,如果我们在旧页面中创建了一个Timer,并且没有在返回到旧页面时取消它,那么它可能会继续执行,从而导致问题。
我们可以通过在旧页面中重写dispose()方法来取消Timer。在dispose()方法中,我们可以使用Timer的cancel方法来取消Timer。
@override
void dispose() {
super.dispose();
timer.cancel();
}
2. 应用进入后台时没有销毁Timer
当应用进入后台时,所有的页面都会被销毁。因此,如果我们在页面中创建了一个Timer,并且没有在应用进入后台时取消它,那么它可能会继续执行,从而导致问题。
我们可以通过在应用的AppDelegate中重写applicationWillResignActive()方法来取消Timer。在applicationWillResignActive()方法中,我们可以使用Timer的cancel方法来取消Timer。
@override
void applicationWillResignActive(UIApplication application) {
super.applicationWillResignActive(application);
timer.cancel();
}
3. 在切换到其他页面时没有销毁Timer
在Flutter中,使用TickerProviderService创建的Timer可以在页面之间共享。我们可以通过在页面中创建TickerProviderService并传递给Timer来实现这一点。这样,当页面销毁时,Timer不会被销毁,它会继续在新的页面中执行。
如果我们不想让Timer在新的页面中继续执行,我们可以通过在页面中重写didChangeDependencies()方法来取消Timer。在didChangeDependencies()方法中,我们可以使用Timer的cancel方法来取消Timer。
@override
void didChangeDependencies() {
super.didChangeDependencies();
timer.cancel();
}
总结
Flutter Timer是一个非常有用的类,它可以在指定的时间间隔后执行指定的代码。在使用Flutter Timer时,我们需要特别注意在不同情况下取消Timer,以避免出现问题。