首页 > 解决方案 > 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();
      }
   }
}
´´´

标签: flutter

解决方案


我不确定为什么它不适合你。我写了这个小测试,它对我来说很好。

请注意,“秒”计时器完成需要 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


推荐阅读