From 53884a37de498f683d600ba0b883153e4b99e9e3 Mon Sep 17 00:00:00 2001 From: Adam Barth Date: Fri, 14 Aug 2015 09:37:19 -0700 Subject: [PATCH] Generalize _cleanRelayoutSubtreeRootChildren into visitChildren This generalization will let us implement other alogorithims that need to walk the RenderObject tree. --- packages/flutter/lib/rendering/object.dart | 17 +++++++++++------ packages/flutter/lib/widgets/scaffold.dart | 8 ++++++++ 2 files changed, 19 insertions(+), 6 deletions(-) diff --git a/packages/flutter/lib/rendering/object.dart b/packages/flutter/lib/rendering/object.dart index 44593fe407..ff1ddbde40 100644 --- a/packages/flutter/lib/rendering/object.dart +++ b/packages/flutter/lib/rendering/object.dart @@ -90,6 +90,7 @@ abstract class Constraints { bool get isTight; } +typedef void RenderObjectVisitor(RenderObject child); typedef void LayoutCallback(Constraints constraints); abstract class RenderObject extends AbstractNode implements HitTestTarget { @@ -125,6 +126,9 @@ abstract class RenderObject extends AbstractNode implements HitTestTarget { markNeedsLayout(); } + // Override in subclasses with children and call the visitor for each child. + void visitChildren(RenderObjectVisitor visitor) { } + static bool _debugDoingLayout = false; static bool get debugDoingLayout => _debugDoingLayout; bool _debugDoingThisResize = false; @@ -193,10 +197,11 @@ abstract class RenderObject extends AbstractNode implements HitTestTarget { if (_relayoutSubtreeRoot != this) { _relayoutSubtreeRoot = null; _needsLayout = true; - _cleanRelayoutSubtreeRootChildren(); + visitChildren((RenderObject child) { + child._cleanRelayoutSubtreeRoot(); + }); } } - void _cleanRelayoutSubtreeRootChildren() { } // workaround for lack of inter-class mixins in Dart void scheduleInitialLayout() { assert(attached); assert(parent == null); @@ -541,9 +546,9 @@ abstract class RenderObjectWithChildMixin implem if (_child != null) _child.detach(); } - void _cleanRelayoutSubtreeRootChildren() { + void visitChildren(RenderObjectVisitor visitor) { if (_child != null) - _child._cleanRelayoutSubtreeRoot(); + visitor(_child); } String debugDescribeChildren(String prefix) { if (child != null) @@ -734,10 +739,10 @@ abstract class ContainerRenderObjectMixin