我可以用初始值启动飞镖秒表吗?
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
我正在查看 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