diff --git a/packages/flame/lib/src/components/core/component_tree_root.dart b/packages/flame/lib/src/components/core/component_tree_root.dart index f5b0b44e913..2d5f1c33380 100644 --- a/packages/flame/lib/src/components/core/component_tree_root.dart +++ b/packages/flame/lib/src/components/core/component_tree_root.dart @@ -137,10 +137,18 @@ class ComponentTreeRoot extends Component { } void processLifecycleEvents() { + if (!hasLifecycleEvents) { + assert( + _lifecycleEventsCompleter == null, + 'The completer is only ever created while events are queued, so it ' + 'should never exist while the queue is empty', + ); + return; + } // reorder events to process later grouped by parent - final reorderParents = {}; + Set? reorderParents; LifecycleEventStatus handleReorderEvent(Component parent) { - reorderParents.add(parent); + (reorderParents ??= {}).add(parent); return LifecycleEventStatus.done; } @@ -151,7 +159,8 @@ class ComponentTreeRoot extends Component { for (final event in queue) { final child = event.child!; final parent = event.parent!; - if (_blocked.contains(child) || _blocked.contains(parent)) { + if (_blocked.isNotEmpty && + (_blocked.contains(child) || _blocked.contains(parent))) { continue; } @@ -176,7 +185,7 @@ class ComponentTreeRoot extends Component { _blocked.clear(); } - for (final parent in reorderParents) { + for (final parent in reorderParents ?? const {}) { parent.rebalanceChildren(); }