ready method
Ensure that all pending tree operations finish.
This is mainly intended for testing purposes: awaiting on this future ensures that the game is fully loaded, and that all pending operations of adding the components into the tree are fully materialized.
Warning: awaiting on a game that was not fully connected will result in an
infinite loop. For example, this could occur if you run x.add(y)
but
then forget to mount x
into the game.
Implementation
Future<void> ready() async {
var repeat = true;
while (repeat) {
// Give chance to other futures to execute first
await Future<void>.delayed(const Duration());
repeat = false;
descendants(includeSelf: true).forEach(
(Component child) {
child.processPendingLifecycleEvents();
repeat |= child.hasPendingLifecycleEvents;
},
);
}
}