From 06af2f7d156e3c347a001c868a648775b26acdfd Mon Sep 17 00:00:00 2001 From: Hans Muller Date: Fri, 26 Jun 2015 11:17:31 -0700 Subject: [PATCH] Add RenderObject.childCount R=ianh@google.com Review URL: https://codereview.chromium.org/1217533002. --- sdk/lib/rendering/object.dart | 8 +++++++- sdk/lib/widgets/tabs.dart | 17 ----------------- 2 files changed, 7 insertions(+), 18 deletions(-) diff --git a/sdk/lib/rendering/object.dart b/sdk/lib/rendering/object.dart index a21db014216..f899d31bedd 100644 --- a/sdk/lib/rendering/object.dart +++ b/sdk/lib/rendering/object.dart @@ -367,7 +367,6 @@ abstract class ContainerParentDataMixin { } abstract class ContainerRenderObjectMixin> implements RenderObject { - // abstract class that has only InlineNode children bool _debugUltimatePreviousSiblingOf(ChildType child, { ChildType equals }) { assert(child.parentData is ParentDataType); @@ -388,12 +387,17 @@ abstract class ContainerRenderObjectMixin _childCount; + ChildType _firstChild; ChildType _lastChild; void _addToChildList(ChildType child, { ChildType before }) { assert(child.parentData is ParentDataType); assert(child.parentData.nextSibling == null); assert(child.parentData.previousSibling == null); + _childCount += 1; + assert(_childCount > 0); if (before == null) { // append at the end (_lastChild) child.parentData.previousSibling = _lastChild; @@ -448,6 +452,8 @@ abstract class ContainerRenderObjectMixin 0); if (child.parentData.previousSibling == null) { assert(_firstChild == child); _firstChild = child.parentData.nextSibling; diff --git a/sdk/lib/widgets/tabs.dart b/sdk/lib/widgets/tabs.dart index 741594d2bf5..a0b615f39a8 100644 --- a/sdk/lib/widgets/tabs.dart +++ b/sdk/lib/widgets/tabs.dart @@ -63,11 +63,9 @@ class RenderTabBar extends RenderBox with BoxConstraints widthConstraints = new BoxConstraints(maxWidth: constraints.maxWidth, maxHeight: constraints.maxHeight); double maxWidth = 0.0; - int childCount = 0; RenderBox child = firstChild; while (child != null) { maxWidth = math.max(maxWidth, child.getMinIntrinsicWidth(widthConstraints)); - ++childCount; assert(child.parentData is TabBarParentData); child = child.parentData.nextSibling; } @@ -78,11 +76,9 @@ class RenderTabBar extends RenderBox with BoxConstraints widthConstraints = new BoxConstraints(maxWidth: constraints.maxWidth, maxHeight: constraints.maxHeight); double maxWidth = 0.0; - int childCount = 0; RenderBox child = firstChild; while (child != null) { maxWidth = math.max(maxWidth, child.getMaxIntrinsicWidth(widthConstraints)); - ++childCount; assert(child.parentData is TabBarParentData); child = child.parentData.nextSibling; } @@ -95,25 +91,12 @@ class RenderTabBar extends RenderBox with double getMaxIntrinsicHeight(BoxConstraints constraints) => _getIntrinsicHeight(constraints); - // TODO(hansmuller): track this value in the parent rather than computing it. - int _childCount() { - int childCount = 0; - RenderBox child = firstChild; - while (child != null) { - ++childCount; - assert(child.parentData is TabBarParentData); - child = child.parentData.nextSibling; - } - return childCount; - } - void performLayout() { assert(constraints is BoxConstraints); size = constraints.constrain(new Size(constraints.maxWidth, _kTabBarHeight)); assert(!size.isInfinite); - int childCount = _childCount(); if (childCount == 0) return;