advanceTime method
This method is called by the Juggler with the time
past since the last
call.
Returns true as long as this Animatable is not completed; false if it is completed.
Implementation
@override
bool advanceTime(num time) {
if (_play == false) return true;
if (_frameTime == null) {
_frameTime = 0.0;
dispatchEvent(_progressEvent);
} else {
_frameTime = _frameTime! + time;
while (_play) {
final frameDuration = _frameDurations[_currentFrame];
if (frameDuration > _frameTime!) break;
final lastFrame = totalFrames - 1;
final prevFrame = _currentFrame;
var nextFrame = _currentFrame + 1;
if (nextFrame > lastFrame) nextFrame = loop ? 0 : lastFrame;
_currentFrame = nextFrame;
_frameTime = _frameTime! - frameDuration;
// dispatch progress event on every new frame
if (nextFrame != prevFrame) {
dispatchEvent(_progressEvent);
if (_currentFrame != nextFrame) return true;
}
// dispatch complete event only on last frame
if (!loop && nextFrame == lastFrame && nextFrame != prevFrame) {
dispatchEvent(_completeEvent);
if (_currentFrame != nextFrame) return true;
}
}
}
return true;
}