| Index: sky/sdk/lib/widgets/block_viewport.dart
|
| diff --git a/sky/sdk/lib/widgets/block_viewport.dart b/sky/sdk/lib/widgets/block_viewport.dart
|
| index 9b5395f798465d4420303ee1a34d43f63d36b722..0c502de1b89b6d5c969130d2b11253a56700ae7f 100644
|
| --- a/sky/sdk/lib/widgets/block_viewport.dart
|
| +++ b/sky/sdk/lib/widgets/block_viewport.dart
|
| @@ -15,7 +15,11 @@ class _Key {
|
| factory _Key.fromWidget(Widget widget) => new _Key(widget.runtimeType, widget.key);
|
| final Type type;
|
| final String key;
|
| +
|
| + @override
|
| bool operator ==(other) => other is _Key && other.type == type && other.key == key;
|
| +
|
| + @override
|
| int get hashCode => 373 * 37 * type.hashCode + key.hashCode;
|
| }
|
|
|
| @@ -27,10 +31,13 @@ class BlockViewport extends RenderObjectWrapper {
|
| double startOffset;
|
| Object token;
|
|
|
| + @override
|
| RenderBlockViewport get root => super.root;
|
| +
|
| + @override
|
| RenderBlockViewport createNode() => new RenderBlockViewport();
|
|
|
| - Map<_Key, Widget> _childrenByKey = new Map<_Key, Widget>();
|
| + Map<_Key, Widget> _childrenByKey = new Map<_Key, Widget>();
|
|
|
| void walkChildren(WidgetTreeWalker walker) {
|
| for (Widget child in _childrenByKey.values)
|
| @@ -39,6 +46,7 @@ class BlockViewport extends RenderObjectWrapper {
|
|
|
| static const _omit = const Object(); // used as a slot when it's not yet time to attach the child
|
|
|
| + @override
|
| void insertChildRoot(RenderObjectWrapper child, dynamic slot) {
|
| if (slot == _omit)
|
| return;
|
| @@ -58,6 +66,7 @@ class BlockViewport extends RenderObjectWrapper {
|
| assert(root == this.root); // TODO(ianh): Remove this once the analyzer is cleverer
|
| }
|
|
|
| + @override
|
| void remove() {
|
| for (Widget child in _childrenByKey.values) {
|
| assert(child != null);
|
| @@ -66,11 +75,13 @@ class BlockViewport extends RenderObjectWrapper {
|
| super.remove();
|
| }
|
|
|
| + @override
|
| void didMount() {
|
| root.callback = layout;
|
| super.didMount();
|
| }
|
|
|
| + @override
|
| void didUnmount() {
|
| root.callback = null;
|
| super.didUnmount();
|
| @@ -100,6 +111,7 @@ class BlockViewport extends RenderObjectWrapper {
|
|
|
| bool _dirty = false;
|
|
|
| + @override
|
| bool retainStatefulNodeIfPossible(BlockViewport newNode) {
|
| retainStatefulRenderObjectWrapper(newNode);
|
| if (startOffset != newNode.startOffset) {
|
| @@ -115,6 +127,7 @@ class BlockViewport extends RenderObjectWrapper {
|
| return true;
|
| }
|
|
|
| + @override
|
| void syncRenderObject(BlockViewport old) {
|
| super.syncRenderObject(old);
|
| if (_dirty)
|
| @@ -257,7 +270,7 @@ class BlockViewport extends RenderObjectWrapper {
|
| }
|
| widget.updateSlot(nextSibling);
|
| nextSibling = widget.root;
|
| - }
|
| + }
|
| }
|
|
|
| _childrenByKey = newChildren;
|
|
|