| Index: sky/examples/fn/widgets/animationgenerator.dart
|
| diff --git a/sky/examples/fn/widgets/animationgenerator.dart b/sky/examples/fn/widgets/animationgenerator.dart
|
| index a7409345f2ef4067a7c99e7e3b919d92addb7908..5c163b6a7bd41ca63a3a1dce4b42ce8ce12ec1de 100644
|
| --- a/sky/examples/fn/widgets/animationgenerator.dart
|
| +++ b/sky/examples/fn/widgets/animationgenerator.dart
|
| @@ -45,8 +45,6 @@ class FrameGenerator {
|
| }
|
| }
|
|
|
| -const double _kFrameTime = 1000 / 60;
|
| -
|
| class AnimationGenerator extends FrameGenerator {
|
|
|
| Stream<double> get onTick => _stream;
|
| @@ -55,6 +53,7 @@ class AnimationGenerator extends FrameGenerator {
|
| final double end;
|
| final Curve curve;
|
| Stream<double> _stream;
|
| + bool _done = false;
|
|
|
| AnimationGenerator(this.duration, {
|
| this.begin: 0.0,
|
| @@ -64,24 +63,23 @@ class AnimationGenerator extends FrameGenerator {
|
| }):super(onDone: onDone) {
|
| double startTime = 0.0;
|
| double targetTime = 0.0;
|
| - bool done = false;
|
| _stream = super.onTick.map((timeStamp) {
|
| if (startTime == 0.0) {
|
| startTime = timeStamp;
|
| targetTime = startTime + duration;
|
| }
|
| -
|
| - // Clamp the final frame to target time so we terminate the series with
|
| - // 1.0 exactly.
|
| - if ((timeStamp - targetTime).abs() <= _kFrameTime) {
|
| - return 1.0;
|
| - }
|
| -
|
| - return (timeStamp - startTime) / duration;
|
| + return math.min((timeStamp - startTime) / duration, 1.0);
|
| })
|
| - .takeWhile((t) => t <= 1.0)
|
| + .takeWhile(_checkForCompletion)
|
| .map((t) => begin + (end - begin) * curve.transform(t));
|
| }
|
| +
|
| + bool _checkForCompletion(double t) {
|
| + if (_done)
|
| + return false;
|
| + _done = t >= 1;
|
| + return true;
|
| + }
|
| }
|
|
|
| double _evaluateCubic(double a, double b, double m) {
|
|
|