visitChildrenOfAnyType method
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;
}