diff --git a/lib/src/rive_core/animation/linear_animation_instance.dart b/lib/src/rive_core/animation/linear_animation_instance.dart index 1b1465f..64328f7 100644 --- a/lib/src/rive_core/animation/linear_animation_instance.dart +++ b/lib/src/rive_core/animation/linear_animation_instance.dart @@ -5,7 +5,12 @@ class LinearAnimationInstance { final LinearAnimation animation; double _time = 0; int direction = 1; - LinearAnimationInstance(this.animation); + + LinearAnimationInstance(this.animation) + : _time = + (animation.enableWorkArea ? animation.workStart : 0).toDouble() / + animation.fps; + double get time => _time; set time(double value) { if (_time == value) { diff --git a/lib/src/rive_render_box.dart b/lib/src/rive_render_box.dart index 851240a..4a4e0d2 100644 --- a/lib/src/rive_render_box.dart +++ b/lib/src/rive_render_box.dart @@ -92,6 +92,7 @@ abstract class RiveRenderBox extends RenderBox { void _frameCallback(Duration duration) { _elapsedSeconds = _stopwatch.elapsedTicks / _stopwatch.frequency; _stopwatch.reset(); + _stopwatch.start(); markNeedsPaint(); } @@ -109,6 +110,8 @@ abstract class RiveRenderBox extends RenderBox { _frameCallbackId = null; if (advance(_elapsedSeconds)) { scheduleRepaint(); + } else { + _stopwatch.stop(); } _elapsedSeconds = 0;