visitChildrenOfAnyType method

  1. @override
bool visitChildrenOfAnyType(
  1. CancelableObjectVisitor visitor
)
override

The implementation should call visitor for each immediate child of this object.

If visitor returns false it should return false immediately, canceling the iteration over its children.

Implementation

@override
bool visitChildrenOfAnyType(CancelableObjectVisitor visitor) {
  var child = firstChild;
  var textIndex = 0;
  var i = 0;

  for (final el in _textAndWidgets) {
    if (el is Widget) {
      final floatData = child!.floatData;
      assert(floatData.index == i && floatData.placeholderIndex == 0);

      // Visit the child widget's render object.
      if (!visitor(child)) return false; //------------------------------->
      child = childAfter(child);
    } else if (el is WrappableText) {
      final wtr = _cache[textIndex++];
      assert(wtr.renderer.placeholderSpans.isEmpty ||
          (child != null && child.floatData.index == i));

      // Visit all the text renderers.
      for (final textRenderer in wtr.renderers) {
        if (!visitor(textRenderer)) return false; //---------------------->
      }

      // Visit all the child render objects embedded in the text.
      var widgetIndex = 0;
      while (child != null && child.floatData.index == i) {
        assert(child.floatData.placeholderIndex == widgetIndex);
        if (!visitor(child)) return false; //----------------------------->
        child = childAfter(child);
        widgetIndex++;
      }
    } else {
      assert(false);
    }

    i++;
  }
  return true;
}