flutter - Flutter timer.periodic - 秒 x 毫秒
问题描述
我正在用 Timer 测试一些代码,但我并没有理解任何事情。我正在使用一个按钮来启动两个计时器,一个是 5 秒,另一个是 5000 毫秒,我以为它们会同时停止,但第一个首先完成,几乎快两倍。部分代码:
int timeLeftSec = 5;
int timeLeftMilSec = 5000;
onPressed: (){
Timer.periodic(Duration seconds: 1), (timer){
if(timeLeftSec > 0){
timeLeftSec--;
}else{
timer.cancel();
}
}
Timer.periodic(Duration milliseconds: 1), (timer){
if(timeLeftMilSec > 0){
timeLeftMilSec--;
}else{
timer.cancel();
}
}
}
´´´
解决方案
我不确定为什么它不适合你。我写了这个小测试,它对我来说很好。
请注意,“秒”计时器完成需要 6 秒。我想完成毫秒计时器需要 5001 毫秒。但我怀疑你会注意到这一点。
import 'dart:async';
import 'package:flutter_test/flutter_test.dart';
void main() {
test('timers', () async {
int timeLeftSec = 5;
int timeLeftMilSec = 5000;
print('${DateTime.now()} Start');
Timer.periodic(const Duration(seconds: 1), (timer) {
if (timeLeftSec > 0) {
timeLeftSec--;
print('${DateTime.now()} seconds... $timeLeftSec');
} else {
print('${DateTime.now()} seconds done');
timer.cancel();
}
});
Timer.periodic(const Duration(milliseconds: 1), (timer) {
if (timeLeftMilSec > 0) {
timeLeftMilSec--;
} else {
print('${DateTime.now()} ms done');
timer.cancel();
}
});
await Future.delayed(Duration(seconds: 10));
});
}
2021-11-10 10:12:25.438793 Start
2021-11-10 10:12:26.446849 seconds... 4
2021-11-10 10:12:27.446518 seconds... 3
2021-11-10 10:12:28.447383 seconds... 2
2021-11-10 10:12:29.447249 seconds... 1
2021-11-10 10:12:30.446504 seconds... 0
2021-11-10 10:12:30.449687 ms done
2021-11-10 10:12:31.447838 seconds done
推荐阅读
- javascript - 在 Google Script 上优化迭代脚本
- azure-blob-storage - 如何使用 Azure 数据工厂将数据库查询的结果拆分为多个 blob 文件以进行雪花提取?
- python - Python:如何使用列中的列表进行分组
- c# - Azure AD B2C + Azure 移动应用程序 - MobileServiceInvalidOperationException
- c++ - 为什么在这段代码片段中复制构造函数被调用了两次?
- here-api - 带有 Trucknopttile 覆盖的路由地图图像 API?(休息)
- c# - 如何在代码文档中正确指定函数可能在 C# 上返回 null?
- activemq - 使用 AMQSource 的 Flink 作业不会生成输出
- c# - 如何从另一个对象中的脚本激活对象上的脚本?
- javascript - Ajax 请求获取错误的 url