processLifecycleEvents method
void
processLifecycleEvents()
inherited
Implementation
void processLifecycleEvents() {
// reorder events to process later grouped by parent
final reorderParents = <Component>{};
LifecycleEventStatus handleReorderEvent(Component parent) {
reorderParents.add(parent);
return LifecycleEventStatus.done;
}
assert(_blocked.isEmpty);
var repeatLoop = true;
while (repeatLoop) {
repeatLoop = false;
for (final event in queue) {
final child = event.child!;
final parent = event.parent!;
if (_blocked.contains(identityHashCode(child)) ||
_blocked.contains(identityHashCode(parent))) {
continue;
}
final status = switch (event.kind) {
LifecycleEventKind.add => child.handleLifecycleEventAdd(parent),
LifecycleEventKind.remove => child.handleLifecycleEventRemove(parent),
LifecycleEventKind.move => child.handleLifecycleEventMove(parent),
LifecycleEventKind.rebalance => handleReorderEvent(parent),
LifecycleEventKind.unknown => LifecycleEventStatus.done,
};
switch (status) {
case LifecycleEventStatus.done:
queue.removeCurrent();
repeatLoop = true;
case LifecycleEventStatus.block:
_blocked.add(identityHashCode(child));
_blocked.add(identityHashCode(parent));
default:
}
}
_blocked.clear();
}
for (final parent in reorderParents) {
parent.children.rebalanceAll();
}
if (!hasLifecycleEvents && _lifecycleEventsCompleter != null) {
_lifecycleEventsCompleter!.complete();
_lifecycleEventsCompleter = null;
}
}