visitChildrenAndTextRenderers method

bool visitChildrenAndTextRenderers(
  1. CancelableObjectVisitor visitor
)

Walks this RenderObject tree in a depth-first pre-order traversal, calling visitor for each child.

If visitor returns true, the walk continues, otherwise it is canceled.

Implementation

bool visitChildrenAndTextRenderers(CancelableObjectVisitor visitor) {
  var canceled = false;

  late void Function(Object object) visitChildrenRecursively;

  void recursiveRenderObjectVisitor(RenderObject object) {
    // This is called for every child of the render object, even after the
    // [visitor] function may have returned `false` for one of the children,
    // so check if canceled before handling.
    if (!canceled) {
      canceled = !visitor(object);
      if (!canceled) visitChildrenRecursively(object);
    }
  }

  bool recursiveObjectVisitor(Object object) {
    canceled = !visitor(object);
    if (!canceled) visitChildrenRecursively(object);
    return !canceled;
  }

  visitChildrenRecursively = (object) {
    if (object is VisitChildrenOfAnyTypeMixin) {
      canceled = !object.visitChildrenOfAnyType(recursiveObjectVisitor);
    } else if (object is RenderObject) {
      object.visitChildren(recursiveRenderObjectVisitor);
    }
  };

  visitChildrenRecursively(this);
  return !canceled;
}