advanceTime method

  1. @override
bool advanceTime(
  1. num time
)
override

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;
}