flutter - 我可以用初始值启动 dart 秒表吗?

标签 flutter dart timer stopwatch

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

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

由于,在后台运行 headless 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 本身,或将磨数差距 添加到 ellapsedMillis,然后在屏幕上显示结果。

很高兴收到你们的来信!

最佳答案

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

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

我发现的最简单的解决方案是像这样扩展 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;
  }

}

目前我对这段代码不需要太多。只需在某个时刻启动秒表,然后保持运行即可。并且可以轻松扩展 Stopwatch 类的其他 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

关于flutter - 我可以用初始值启动 dart 秒表吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/62452593/

相关文章:

dart - Flutter Bottomsheet Modal 不重新渲染

flutter - 如何在 flutter 中从图库中检索图像

firebase - 将 'QueryDocumentSnapshot' 转换为 Json

c# - 如何在计时器函数中停止计时器?

flutter - 检查身份验证 session 的最佳位置在 flutter 中仍然存在

dart - 如何允许用户从文本小部件中选择文本?

firebase - flutter 中的错误 : The argument type 'TextEditingController' can't be assigned to the parameter type 'String' .

flutter - 如何将 Flutter Web 部署到我自己的服务器上?

c++ - 我如何在 C++ 中为进程计时?

javascript - AngularJS 中的警报计时器值