50 lines
1.0 KiB
Dart
50 lines
1.0 KiB
Dart
import 'dart:async';
|
|
|
|
typedef TimeoutCallback = void Function();
|
|
|
|
class OverTimeTimerManager {
|
|
// 构造函数,接受超时时间
|
|
OverTimeTimerManager({required this.timeoutInSeconds});
|
|
|
|
// 定义一个可取消的 Timer
|
|
Timer? _timer;
|
|
|
|
// 超时时间(以秒为单位),是 final 的,因此必须在构造函数中初始化
|
|
final int timeoutInSeconds;
|
|
|
|
// 超时回调函数
|
|
TimeoutCallback? _onTimeout;
|
|
|
|
// 启动计时器
|
|
void startTimer() {
|
|
_cancelTimer(); // 取消任何已存在的计时器
|
|
_timer = Timer(Duration(seconds: timeoutInSeconds), () {
|
|
// 超时回调方法
|
|
_onTimeout?.call();
|
|
// 清除定时器
|
|
_cancelTimer();
|
|
});
|
|
}
|
|
|
|
// 接收到消息时调用此方法
|
|
void receiveMessage() {
|
|
startTimer();
|
|
}
|
|
|
|
// 设置超时回调函数
|
|
void setOnTimeout(TimeoutCallback? callback) {
|
|
_onTimeout = callback;
|
|
}
|
|
|
|
// 取消计时器
|
|
void _cancelTimer() {
|
|
_timer?.cancel();
|
|
_timer = null;
|
|
}
|
|
|
|
// 清理资源
|
|
void dispose() {
|
|
_cancelTimer();
|
|
}
|
|
}
|