@@ -864,10 +864,10 @@ void _scheduleComponentForRender(Component component) {
864
864
}
865
865
}
866
866
867
- // RenderObjectWrappers correspond to a desired state of a RenderObject.
868
- // They are fully immutable, with one exception: A Widget which is a
869
- // Component which lives within an MultiChildRenderObjectWrapper's
870
- // children list, may be replaced with the "old" instance if it has
867
+ // RenderObjectWrappers correspond to a desired state of a
868
+ // RenderObject. They are fully immutable, except that a Widget which
869
+ // is a Component which lives within a RenderObjectWrapper's children
870
+ // list may be in-place replaced with the "old" instance if it has
871
871
// become stateful.
872
872
abstract class RenderObjectWrapper extends Widget {
873
873
@@ -911,7 +911,7 @@ abstract class RenderObjectWrapper extends Widget {
911
911
if (_ancestor is RenderObjectWrapper )
912
912
_ancestor.insertChildRoot (this , slot);
913
913
} else {
914
- assert (old is RenderObjectWrapper );
914
+ assert (old.runtimeType == runtimeType );
915
915
_renderObject = old.renderObject;
916
916
_ancestor = old._ancestor;
917
917
assert (_renderObject != null );
@@ -1088,9 +1088,9 @@ abstract class MultiChildRenderObjectWrapper extends RenderObjectWrapper {
1088
1088
void syncRenderObject (MultiChildRenderObjectWrapper old) {
1089
1089
super .syncRenderObject (old);
1090
1090
1091
- final renderObject = this .renderObject; // TODO(ianh): Remove this once the analyzer is cleverer
1092
- if (renderObject is ! ContainerRenderObjectMixin )
1093
- return ;
1091
+ final ContainerRenderObjectMixin renderObject = this .renderObject; // TODO(ianh): Remove this once the analyzer is cleverer
1092
+ assert (renderObject is ContainerRenderObjectMixin );
1093
+ assert (old == null || old.renderObject == renderObject) ;
1094
1094
1095
1095
var startIndex = 0 ;
1096
1096
var endIndex = children.length;
@@ -1155,28 +1155,21 @@ abstract class MultiChildRenderObjectWrapper extends RenderObjectWrapper {
1155
1155
}
1156
1156
}
1157
1157
1158
- bool searchForOldNode () {
1158
+ void searchForOldNode () {
1159
1159
if (currentNode.key == null )
1160
- return false ; // never re-order these nodes
1160
+ return ; // never re-order these nodes
1161
1161
1162
1162
ensureOldIdMap ();
1163
1163
oldNode = oldNodeIdMap[currentNode.key];
1164
1164
if (oldNode == null )
1165
- return false ;
1165
+ return ;
1166
1166
1167
1167
oldNodeIdMap[currentNode.key] = null ; // mark it reordered
1168
1168
assert (renderObject is ContainerRenderObjectMixin );
1169
1169
assert (old.renderObject is ContainerRenderObjectMixin );
1170
1170
assert (oldNode.renderObject != null );
1171
1171
1172
- if (old.renderObject == renderObject) {
1173
- renderObject.move (oldNode.renderObject, before: nextSibling);
1174
- } else {
1175
- (old.renderObject as ContainerRenderObjectMixin ).remove (oldNode.renderObject); // TODO(ianh): Remove cast once the analyzer is cleverer
1176
- renderObject.add (oldNode.renderObject, before: nextSibling);
1177
- }
1178
-
1179
- return true ;
1172
+ renderObject.move (oldNode.renderObject, before: nextSibling);
1180
1173
}
1181
1174
1182
1175
// Scan forwards, this time we may re-order;
0 commit comments