如何在倒计时期间执行功能?

How can I execute a function during the count-down timer?

我想收集一段时间内的一些实时值,然后据此进行处理。下面是javaandroid工作室的代码。但是,我找不到任何方法在飞镖倒计时期间执行功能。

timer = new CountDownTimer(30000, 1000) {

        public void onTick(long millisUntilFinished) {


            sum = Math.round(Math.sqrt(Math.pow(event.values[0], 2)
                    + Math.pow(event.values[1], 2)
                    + Math.pow(event.values[2], 2)));
            repeat_count++;
            Log.e("Check sum", String.valueOf(sum));
            if ((sum >= 9.80) && (sum <= 11.0)) {
                count++;
            }

        }


        public void onFinish() {
            String c = String.valueOf(count);
            String rep=String.valueOf(repeat_count);
            Log.e("Count is", c);
            Log.e("Loop count",rep);
            Intent intent=new Intent();
            intent.putExtra("count_value",count);
            setResult(2, intent);
            finish();


        }
    }.start();

请帮忙

I cannot find any way to execute a function during the count-down timer in dart.

你问的不是很清楚。 Dart 没有 CountDownTimer class 如果这就是你的意思,但你可以自己实现一个而不会有太多麻烦。您通常只需要使用 Timer.periodic 定期调用回调,然后在足够的总时间过去后取消 Timer

与 Android 版本更相似的实现:

import 'dart:async';

class CountDownTimer {
  final Duration total;
  final Duration interval;

  final void Function(Duration) onTick;
  final void Function() onFinish;

  Timer? _periodicTimer;
  Timer? _completionTimer;

  CountDownTimer({
    required this.total,
    required this.interval,
    required this.onTick,
    required this.onFinish,
  });

  void start() {
    var endTime = DateTime.now().add(total);
    _periodicTimer = Timer.periodic(interval, (_) {
      var timeLeft = endTime.difference(DateTime.now());
      onTick(timeLeft);
    });
    _completionTimer = Timer(total, () {
      _periodicTimer!.cancel();
      onFinish();
    });
  }

  void cancel() {
    _periodicTimer?.cancel();
    _completionTimer?.cancel();
  }
}

void main() {
  var countDownTimer = CountDownTimer(
    total: const Duration(seconds: 30),
    interval: const Duration(seconds: 1),
    onTick: (timeLeft) {
      print(timeLeft);
    },
    onFinish: () {
      print('Done');
    },
  );
  countDownTimer.start();
}

与 Android 版本的显着差异:

  • 使用 Duration 而不是表示毫秒的整数。
  • 采用 onTickonFinish 回调,而不是期望您使用覆盖扩展 class。
  • onTick 初始调用和最终调用的行为可能略有不同。 documentation for the Android version 没有解释该行为应该是什么,所以我选择了我个人认为合理的行为。

编辑:通过维护两个单独的 Timer 对象更新了更简单的实现。