Thanks to visit codestin.com
Credit goes to github.com

Skip to content

Commit d98df6c

Browse files
committed
feat: global timer count at minute changed
1 parent 23f68cd commit d98df6c

1 file changed

Lines changed: 24 additions & 5 deletions

File tree

lib/controller/global_timer_controller.dart

Lines changed: 24 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -9,15 +9,34 @@ import 'package:watermeter/repository/logger.dart';
99
class GlobalTimerController {
1010
static final GlobalTimerController i = GlobalTimerController._();
1111
GlobalTimerController._() {
12-
_timer = Timer.periodic(const Duration(minutes: 1), (_) {
13-
currentTimeSignal.value = DateTime.now();
14-
log.debug("Global Timer: Time is ${currentTimeSignal.value}");
15-
});
12+
_scheduleNext();
13+
log.info(
14+
"Global Timer: Time is ${currentTimeSignal.value}, timer initialized",
15+
);
1616
}
1717

1818
final currentTimeSignal = signal(DateTime.now());
19+
late Timer _timer;
1920

20-
late final Timer _timer;
21+
/// 每次触发后重新计算到下一个整分的间隔,确保始终对齐整分。
22+
void _scheduleNext() {
23+
final now = DateTime.now();
24+
final nextMinute = DateTime(
25+
now.year,
26+
now.month,
27+
now.day,
28+
now.hour,
29+
now.minute + 1,
30+
);
31+
_timer = Timer(
32+
nextMinute.difference(now) + const Duration(milliseconds: 100),
33+
() {
34+
currentTimeSignal.value = DateTime.now();
35+
log.debug("Global Timer: Time is ${currentTimeSignal.value}");
36+
_scheduleNext();
37+
},
38+
);
39+
}
2140

2241
void dispose() => _timer.cancel();
2342
}

0 commit comments

Comments
 (0)