# key property

Key key
final, inherited

Controls how one widget replaces another widget in the tree.

If the `runtimeType` and key properties of the two widgets are `operator==`, respectively, then the new widget replaces the old widget by updating the underlying element (i.e., by calling `Element.update` with the new widget). Otherwise, the old element is removed from the tree, the new widget is inflated into an element, and the new element is inserted into the tree.

In addition, using a `GlobalKey` as the widget's key allows the element to be moved around the tree (changing parent) without losing state. When a new widget is found (its key and type do not match a previous widget in the same location), but there was a widget with that same global key elsewhere in the tree in the previous frame, then that widget's element is moved to the new location.

Generally, a widget that is the only child of another widget does not need an explicit key.

See also the discussions at `Key` and `GlobalKey`.

## Implementation

    final Key key