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);
        }
    }