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

时间:2020-06-18 14:40:19

标签: flutter dart timer stopwatch

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

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

由于在后台运行无头dart代码现在有点含糊,我认为跟踪时间和时间间隔(如果在意外关闭后恢复应用程序时存在时间间隔)是最好的选择。像下面这样的单独数据对象可以跟踪时间以及秒表是否正在运行...

class StopwatchTracker{

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

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

}

有了这个,我有了一个对象,该对象具有来自秒表的lastUpdated时间的数据。 将此与systemTime(将是设备的当前系统时间)进行比较。 现在,我们来看看lastUpdated时间和systemTime之间是否有间隔。如果存在间隙,秒表应以“间隙”为单位“跳到”时间。

StopwatchTracker对象仅在应用启动/恢复时初始化,并且每隔几秒钟就会更新lastUpdated时间。我认为逻辑已经存在,但是,正如我提到的那样,dart中的Stopwatch类没有一种用起始值对其进行初始化的方法。

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

将很高兴收到您的来信!

1 个答案:

答案 0 :(得分:1)

是的,我可以! > 是的,但实际上不是

我无法将秒表的起始值设置为在特定时间启动/恢复,甚至无法重新调整当前运行时间。

我发现最简单的解决方案是像这样扩展Stopwatch类:

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类型。

这是我打算使用课程的方式

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