Observable objects. Flutter uses both the model-observation and
the reactive paradigms. Obviously, the reactive paradigm is dominant,
but Flutter uses observable model objects for some leaf data structures.
For example, Animations notify an observer list when their value changes.
Flutter hands off these observable objects from the widget tree to the
render tree, which observes them directly and invalidates only the
appropriate stage of the pipeline when they change. For example,
a change to an Animation<Color> might trigger only the paint phase
rather than both the build and paint phases.

Taken together and summed over the large trees created by aggressive
composition, these optimizations have a substantial effect on performance.

Separation of the Element and RenderObject trees