During the build phase, Flutter translates the widgets expressed in code into a
corresponding element tree, with one element for every widget. Each element
represents a specific instance of a widget in a given location of the tree
hierarchy. There are two basic types of elements:

ComponentElement, a host for other elements.

RenderObjectElement, an element that participates in the layout or paint
phases.

RenderObjectElements are an intermediary between their widget analog and the
underlying RenderObject, which we’ll come to later.

The element for any widget can be referenced through its BuildContext, which
is a handle to the location of a widget in the tree. This is the context in a
function call such as Theme.of(context), and is supplied to the build()
method as a parameter.