Skip to content
This repository was archived by the owner on Feb 25, 2025. It is now read-only.

Commit 821410b

Browse files
committed
Merge pull request #703 from Hixie/widgets
RenderObjectWrapper cleanup and new asserts.
2 parents 667cfe5 + f35f1f7 commit 821410b

File tree

1 file changed

+12
-19
lines changed

1 file changed

+12
-19
lines changed

sky/packages/sky/lib/widgets/framework.dart

+12-19
Original file line numberDiff line numberDiff line change
@@ -864,10 +864,10 @@ void _scheduleComponentForRender(Component component) {
864864
}
865865
}
866866

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
871871
// become stateful.
872872
abstract class RenderObjectWrapper extends Widget {
873873

@@ -911,7 +911,7 @@ abstract class RenderObjectWrapper extends Widget {
911911
if (_ancestor is RenderObjectWrapper)
912912
_ancestor.insertChildRoot(this, slot);
913913
} else {
914-
assert(old is RenderObjectWrapper);
914+
assert(old.runtimeType == runtimeType);
915915
_renderObject = old.renderObject;
916916
_ancestor = old._ancestor;
917917
assert(_renderObject != null);
@@ -1088,9 +1088,9 @@ abstract class MultiChildRenderObjectWrapper extends RenderObjectWrapper {
10881088
void syncRenderObject(MultiChildRenderObjectWrapper old) {
10891089
super.syncRenderObject(old);
10901090

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);
10941094

10951095
var startIndex = 0;
10961096
var endIndex = children.length;
@@ -1155,28 +1155,21 @@ abstract class MultiChildRenderObjectWrapper extends RenderObjectWrapper {
11551155
}
11561156
}
11571157

1158-
bool searchForOldNode() {
1158+
void searchForOldNode() {
11591159
if (currentNode.key == null)
1160-
return false; // never re-order these nodes
1160+
return; // never re-order these nodes
11611161

11621162
ensureOldIdMap();
11631163
oldNode = oldNodeIdMap[currentNode.key];
11641164
if (oldNode == null)
1165-
return false;
1165+
return;
11661166

11671167
oldNodeIdMap[currentNode.key] = null; // mark it reordered
11681168
assert(renderObject is ContainerRenderObjectMixin);
11691169
assert(old.renderObject is ContainerRenderObjectMixin);
11701170
assert(oldNode.renderObject != null);
11711171

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);
11801173
}
11811174

11821175
// Scan forwards, this time we may re-order;

0 commit comments

Comments
 (0)