我可以用初始值启动飞镖秒表吗?

Can I start the dart Stopwatch with an initial value?

我正在查看 Stopwatch 的文档,我确定他们没有以初始值启动秒表的方法。

我正在开发一个需要测量经过时间的应用程序。因此,秒表成为这里显而易见的选择。但是,有一个用例,应用程序的用户可能会在清除后台应用程序时意外关闭应用程序。

因为,运行 后台的无头飞镖代码现在有点模糊,我相信最好在恢复应用程序时跟踪时间和时间间隔(如果有的话)意外关闭后。像下面这样的单独数据对象可以跟踪时间以及秒表是否 运行...

class StopwatchTracker{

  final stopwatch;
  final lastUpdated;
  final isRunning;
  final systemTime;

  StopwatchTracker({this.stopwatch, this.lastUpdated, this.isRunning, this.systemTime});

}

有了这个,我就有了一个对象,其中包含来自秒表的 lastUpdated 时间的数据。 将此与 systemTime 进行比较,后者将是设备的当前系统时间。 现在,我们可以看看 lastUpdated 时间和 systemTime 时间之间是否有差距。如果有差距,秒表应该 "leap" 到时间,"gap" 个单位。

StopwatchTracker 对象只会在应用 start/resume 上初始化,每隔几秒,它会更新 lastUpdated 时间。我认为逻辑就在那里,但是,正如我提到的,dart 中的秒表 class 没有使用起始值对其进行初始化的方法。

我想知道是否可以扩展 Stopwatch class 以容纳一种方法来执行此操作。或者第二种选择是更新 ellapsedMillis 本身或将 gap in mills 添加到 ellapsedMillis,然后在屏幕上显示结果。

很想听听你们对此的看法!

是的,我可以! > 嗯是的,但实际上没有

我无法在某个时间将秒表的起始值设置为start/resume,甚至无法重新调整当前的运行时间。

我找到的最简单的解决方案是像这样扩展 class 秒表:

class StopWatch extends Stopwatch{
  int _starterMilliseconds = 0;

  StopWatch();

  get elapsedDuration{
    return Duration(
      microseconds: 
      this.elapsedMicroseconds + (this._starterMilliseconds * 1000)
    );
  }

  get elapsedMillis{
    return this.elapsedMilliseconds + this._starterMilliseconds;
  }

  set milliseconds(int timeInMilliseconds){
    this._starterMilliseconds = timeInMilliseconds;
  }

}

目前我对这段代码的要求不高。只需在某个时间启动秒表,然后保持 运行。它可以很容易地扩展到其他 get 类型的 class 秒表。

这就是我打算如何使用 class

void main() {
  var stopwatch = new StopWatch(); //Creates a new StopWatch, not Stopwatch
  stopwatch.start();               //start method, not overridden
  stopwatch.milliseconds = 10000;  //10 seconds have passed
  print(stopwatch.elapsedDuration);//returns the recalculated duration
  stopwatch.stop();
}

想玩一下代码,还是想测试一下? Click here