diff --git a/packages/flame/lib/src/components/component.dart b/packages/flame/lib/src/components/component.dart index c222aea03..ab58ff277 100644 --- a/packages/flame/lib/src/components/component.dart +++ b/packages/flame/lib/src/components/component.dart @@ -501,6 +501,7 @@ class Component { final onLoadFuture = onLoad(); if (onLoadFuture == null) { _state = LifecycleState.loaded; + _loadCompleter?.complete(); } else { return onLoadFuture.then((_) { _state = LifecycleState.loaded; diff --git a/packages/flame/test/components/component_lifecycle_test.dart b/packages/flame/test/components/component_lifecycle_test.dart index 8b3568829..fe9bd6d8a 100644 --- a/packages/flame/test/components/component_lifecycle_test.dart +++ b/packages/flame/test/components/component_lifecycle_test.dart @@ -117,6 +117,17 @@ void main() { }, ); + testWithFlameGame( + '.loaded completes even if accessed before the component added to game', + (game) async { + final component = Component(); + final loadedFuture = component.loaded; + game.add(component); + await game.ready(); + expectLater(loadedFuture, completes); + }, + ); + // Obsolete scenario, when we used to have a separate "prepare" stage flameGame.test('parent prepares the component', (game) async { final parent = _MyComponent('parent');