replaceAllChildren method
Replaces the entire children list with newChildren in the given
order. Implementations must adopt children that are new and drop
children that are no longer present.
Implementation
@override
void replaceAllChildren(List<RenderObject> newChildren) {
if (hasSameRenderChildrenInOrder(_children, newChildren)) return;
final removedIndex = singleRemovedRenderChildIndex(_children, newChildren);
if (removedIndex != null) {
final removed = _children[removedIndex];
dropChild(removed);
_childOffsets.remove(removed);
_children.removeAt(removedIndex);
markNeedsLayout();
return;
}
final newSet = Set<RenderObject>.identity()..addAll(newChildren);
for (final c in List<RenderObject>.from(_children)) {
if (!newSet.contains(c)) {
dropChild(c);
_childOffsets.remove(c);
}
}
final oldSet = Set<RenderObject>.identity()..addAll(_children);
for (final c in newChildren) {
if (!oldSet.contains(c)) {
adoptChild(c);
}
}
_children
..clear()
..addAll(newChildren);
markNeedsLayout();
}