flushLayout method

void flushLayout ()

Update the layout information for all dirty render objects.

This function is one of the core stages of the rendering pipeline. Layout information is cleaned prior to painting so that render objects will appear on screen in their up-to-date locations.

See RendererBinding for an example of how this function is used.

Implementation

void flushLayout() {
  if (!kReleaseMode) {
    Timeline.startSync('Layout', arguments: timelineWhitelistArguments);
  }
  assert(() {
    _debugDoingLayout = true;
    return true;
  }());
  try {
    // TODO(ianh): assert that we're not allowing previously dirty nodes to redirty themselves
    while (_nodesNeedingLayout.isNotEmpty) {
      final List<RenderObject> dirtyNodes = _nodesNeedingLayout;
      _nodesNeedingLayout = <RenderObject>[];
      for (RenderObject node in dirtyNodes..sort((RenderObject a, RenderObject b) => a.depth - b.depth)) {
        if (node._needsLayout && node.owner == this)
          node._layoutWithoutResize();
      }
    }
  } finally {
    assert(() {
      _debugDoingLayout = false;
      return true;
    }());
    if (!kReleaseMode) {
      Timeline.finishSync();
    }
  }
}