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;
}
}