requestFocus method

Requests the primary focus for this node, or for a supplied node, which
will also give focus to its ancestors.

If called without a node, request focus for this node.

If the given node is not yet a part of the focus tree, then this method
will add the node as a child of this node before requesting focus.

If the given node is a FocusScopeNode and that focus scope node has a
non-null focusedChild, then request the focus for the focused child.
This process is recursive and continues until it encounters either a focus
scope node with a null focused child or an ordinary (non-scope)
FocusNode is found.

The node is notified that it has received the primary focus in a
microtask, so notification may lag the request by up to one frame.

Implementation

void requestFocus([FocusNode node]) {
if (node != null) {
if (node._parent == null) {
_reparent(node);
}
assert(node.ancestors.contains(this), 'Focus was requested for a node that is not a descendant of the scope from which it was requested.');
node._doRequestFocus();
return;
}
_doRequestFocus();
}