buildScope method

void buildScope()

Rebuilds all dirty elements in depth order under a reentrancy guard.

Implementation

void buildScope() {
  if (_building) {
    throw StateError('BuildOwner.buildScope cannot be re-entered');
  }
  _building = true;
  try {
    while (_dirty.isNotEmpty) {
      final batch = <_DirtyElement>[];
      var order = 0;
      while (_dirty.isNotEmpty) {
        final element = _dirty.removeFirst();
        batch.add(_DirtyElement(element, _elementDepth(element), order++));
      }
      batch.sort((a, b) {
        final depthCompare = a.depth.compareTo(b.depth);
        if (depthCompare != 0) {
          return depthCompare;
        }
        return a.order.compareTo(b.order);
      });

      for (final dirty in batch) {
        final element = dirty.element;
        _dirtySet.remove(element);
        if (!element.mounted) {
          continue;
        }
        element.rebuild();
      }
    }
  } finally {
    _building = false;
  }
}