Entire applications can be built with only
StatelessWidgets, which are essentially functions that
describe how arguments map to other functions, bottoming out
in primitives that compute layouts or paint graphics.
(Such applications can’t easily have state,
so are typically non-interactive.) For example, the Icon
widget is essentially a function that maps its arguments
(color, icon, size) into layout primitives.
Additionally, heavy use is made of immutable data structures,
including the entire Widget class
hierarchy as well as numerous supporting classes such as
Rect and TextStyle. On a smaller scale, Dart’s
Iterable API, which makes heavy use of the functional
style (map, reduce, where, etc), is frequently used to process
lists of values in the framework.

User interactions are represented by event objects
that are dispatched to callbacks registered with event handlers.
Screen updates are triggered by a similar callback mechanism. The
Listenable class, which is used as the basis of the
animation system, formalizes a subscription model for events
with multiple listeners.