Avoid overly large single widgets with a large build() function.
Split them into different widgets based on encapsulation
but also on how they change:
    
      When setState() is called on a State object,
all descendent widgets rebuild. Therefore,
localize the setState() call to the part of
the subtree whose UI actually needs to change.
Avoid calling setState() high up in the tree
if the change is contained to a small part of the tree.
      The traversal to rebuild all descendents stops when the
same instance of the child widget as the previous
frame is re-encountered. This technique is heavily
used inside the framework for optimizing
animations where the animation doesn’t affect the child subtree.
See the TransitionBuilder pattern and
the source code for SlideTransition,
which uses this principle to avoid rebuilding its