configAnimation method

void configAnimation({
  1. required Duration delay,
  2. required bool animate,
  3. required bool manualTrigger,
  4. required bool infinite,
  5. Duration loopDelay = Duration.zero,
  6. AnimateDoFinishCallback? onFinish,
  7. AnimateDoLoopCallback? onLoop,
  8. AnimateDoControllerCallback? controllerCallback,
})
inherited

Wires up status listeners and triggers the animation, unless manualTrigger is true. Should be called once from initState.

Implementation

void configAnimation({
  required Duration delay,
  required bool animate,
  required bool manualTrigger,
  required bool infinite,
  Duration loopDelay = Duration.zero,
  AnimateDoFinishCallback? onFinish,
  AnimateDoLoopCallback? onLoop,
  AnimateDoControllerCallback? controllerCallback,
}) {
  final bool hasLoopDelay = infinite && loopDelay > Duration.zero;

  if (onFinish != null || hasLoopDelay) {
    controller.addStatusListener((AnimationStatus status) {
      if (status == AnimationStatus.completed) {
        onFinish?.call(AnimateDoDirection.forward);
        if (hasLoopDelay) {
          _loopTimerActive = true;
          onLoop?.call();
          _loopDelayTimer?.cancel();
          _loopDelayTimer = Timer(loopDelay, () {
            _loopTimerActive = false;
            if (disposed) return;
            controller.forward(from: 0);
          });
        }
      } else if (status == AnimationStatus.dismissed) {
        onFinish?.call(AnimateDoDirection.backward);
      }
    });
  }

  if (controllerCallback != null) {
    controllerCallback(controller);
  }

  if (!manualTrigger && animate) {
    _scheduleStart(delay: delay, infinite: infinite, loopDelay: loopDelay);
  }
}