public void autofocus(FocusNode node) { D.assert(FocusManagerUtils._focusDebug($"Node autofocusing: {node}")); if (focusedChild == null) { if (node._parent == null) { _reparent(node); } D.assert(node.ancestors.Contains(this), () => "Autofocus was requested for a node that is not a descendant of the scope from which it was requested."); node._doRequestFocus(findFirstFocus: true); } }
public override void _doRequestFocus(bool findFirstFocus = false) { D.assert(findFirstFocus != null); // It is possible that a previously focused child is no longer focusable. while (focusedChild != null && !focusedChild.canRequestFocus) { _focusedChildren.removeLast(); } if (!findFirstFocus) { if (canRequestFocus) { _setAsFocusedChildForScope(); _markNextFocus(this); } return; } FocusNode primaryFocus = focusedChild ?? this; while (primaryFocus is FocusScopeNode && (( FocusScopeNode)primaryFocus).focusedChild != null) { FocusScopeNode scope = primaryFocus as FocusScopeNode; primaryFocus = scope.focusedChild; } if (primaryFocus == this) { if (primaryFocus.canRequestFocus) { _setAsFocusedChildForScope(); _markNextFocus(this); } } else { primaryFocus._doRequestFocus(findFirstFocus: findFirstFocus); } }