requestAnimationFrame method

void requestAnimationFrame(
  1. int newFrameId,
  2. DoubleCallback callback
)

Implementation

void requestAnimationFrame(int newFrameId, DoubleCallback callback) {
  _animationFrameCallbackMap[newFrameId] = true;
  SchedulerBinding.instance.addPostFrameCallback((Duration timeStamp) {
    if (_frameDelayCount > 0) {
      _frameDelayCount--;
      requestAnimationFrame(newFrameId, callback);
      return;
    }

    if (_paused) {
      _pendingFrameCallbacks.add(() {
        callback(0);
      });
      return;
    }

    if (_animationFrameCallbackMap.containsKey(newFrameId)) {
      _animationFrameCallbackMap.remove(newFrameId);
      double highResTimeStamp = timeStamp.inMicroseconds / 1000;
      callback(highResTimeStamp);
    }
  });
  SchedulerBinding.instance.scheduleFrame();
}