Key events start at the focus node with primary focus. If that node doesn’t
return KeyEventResult.handled from its onKey handler, then its parent focus
node is given the event. If the parent doesn’t handle it, it goes to its parent,
and so on, until it reaches the root of the focus tree. If the event reaches the
root of the focus tree without being handled, then it is returned to the
platform to give to the next native control in the application (in case the
Flutter UI is part of a larger native application UI). Events that are handled
are not propagated to other Flutter widgets, and they are also not propagated to
native widgets.

Here’s an example of a Focus widget that absorbs every key that its subtree
doesn’t handle, without being able to be the primary focus:

Focus key events are processed before text entry events, so handling a key event
when the focus widget surrounds a text field prevents that key from being
entered into the text field.