In the first animated example you use .addListener()
Tim
2

The Tween and the AnimationController are linked in line 55 of main.dart. The AnimationController is an Animation<double> and since the Tween<T> maps doubles to Ts, it can be used to create an Animation<T> from an Animation<double>. This is done using the animate method of Tween which it inherits from Animatable and the result is given to the painter code. I glossed over these details in my text because I wanted to write about the pure Tween concept (with which I had a bit of experience) rather than the Animation API (of which I had barely scratched the surface).

You are quite right about tween.evaluate(animation) being used to extract the current t from the animation and hence the current T from the tween in order to start the next animation exactly where the current one, if any, was interrupted.