The following example contains one way to implement these updates
to the bouncing ball example. Run the example to the see the difference
that these updates make to your animation:

Example: bouncing ball (starter code 3)

At 60 fps, this updated version of the bouncing ball animation
looks smoother than in all prior examples!

This example only creates half of the animation—the
ball moves down, but not back up again.
Wouldn’t it be nice to have a declarative interface
for controlling the direction that the animation proceeds
across the sequence of frames, and the conditions for
starting and stopping it? This way, you could easily
represent when to start the animation, pause it,
play forward, play backward, end it, or repeat it indefinitely.
In the next section, you’ll learn how Flutter’s animation library
provides an interface for doing all of these things.

Quick review: