For example, this:
.animate(
onInit: (controller) => print('init'),
onPlay: (controller) => print('play'),
onComplete: (controller) => print('complete'),
)
.slideY(duration: 0.ms)
Will print:
flutter: init
flutter: complete
flutter: play
This is because we need to fire onPlay after the animation is started (so it can be stopped in the onPlay), but a zero duration controller instantly updates it's status as completed.