diff --git a/packages/flutter/lib/widgets/framework.dart b/packages/flutter/lib/widgets/framework.dart index b990424801..9a36e84fa5 100644 --- a/packages/flutter/lib/widgets/framework.dart +++ b/packages/flutter/lib/widgets/framework.dart @@ -998,6 +998,9 @@ abstract class RenderObjectWrapper extends Widget { // for use by subclasses that manage their children using lists void syncChildren(List newChildren, List oldChildren) { + assert(newChildren != null); + assert(oldChildren != null); + assert(!identical(newChildren, oldChildren)); // This attempts to diff the new child list (this.children) with // the old child list (old.children), and update our renderObject @@ -1257,7 +1260,19 @@ abstract class MultiChildRenderObjectWrapper extends RenderObjectWrapper { void syncRenderObject(MultiChildRenderObjectWrapper old) { super.syncRenderObject(old); - syncChildren(children, old == null ? const [] : old.children); + List oldChildren = old == null ? const [] : old.children; + if (oldChildren == children) { + int index = children.length; + Widget nextSibling = null; + while (index > 0) { + index -= 1; + Widget child = children[index]; + nextSibling = syncChild(child, child, nextSibling); + children[index] = nextSibling; + } + } else { + syncChildren(children, oldChildren); + } } }