From 942177906656b6bdb9bcc0c4ca51de12bbbade22 Mon Sep 17 00:00:00 2001 From: Lukas Klingsbo Date: Thu, 3 Oct 2024 18:56:59 +0200 Subject: [PATCH 1/3] docs: Explain how to set button sprite in SpriteButtonComponent --- .../lib/src/components/input/sprite_button_component.dart | 6 ++++++ 1 file changed, 6 insertions(+) diff --git a/packages/flame/lib/src/components/input/sprite_button_component.dart b/packages/flame/lib/src/components/input/sprite_button_component.dart index 71ab8ad4720..1e3ed41cc9a 100644 --- a/packages/flame/lib/src/components/input/sprite_button_component.dart +++ b/packages/flame/lib/src/components/input/sprite_button_component.dart @@ -58,6 +58,12 @@ class SpriteButtonComponent extends SpriteGroupComponent @override void onLoad() { super.onLoad(); + assert( + _button != null, + 'The button sprite has to be set either in the constructor or if you are ' + 'extending this class and setting it in onLoad you have to call ' + 'super.onLoad() last in your overridden onLoad method.', + ); sprites = { ButtonState.up: button, ButtonState.down: buttonDown, From 0a8102494f7763f4f2de66dc5f3b1df146306d4b Mon Sep 17 00:00:00 2001 From: Lukas Klingsbo Date: Thu, 3 Oct 2024 19:03:38 +0200 Subject: [PATCH 2/3] fix: Set the sprites in onMount instead of in onLoad --- .../components/input/sprite_button_component.dart | 15 ++------------- 1 file changed, 2 insertions(+), 13 deletions(-) diff --git a/packages/flame/lib/src/components/input/sprite_button_component.dart b/packages/flame/lib/src/components/input/sprite_button_component.dart index 1e3ed41cc9a..dc90c56007d 100644 --- a/packages/flame/lib/src/components/input/sprite_button_component.dart +++ b/packages/flame/lib/src/components/input/sprite_button_component.dart @@ -56,27 +56,16 @@ class SpriteButtonComponent extends SpriteGroupComponent } @override - void onLoad() { - super.onLoad(); + void onMount() { assert( _button != null, - 'The button sprite has to be set either in the constructor or if you are ' - 'extending this class and setting it in onLoad you have to call ' - 'super.onLoad() last in your overridden onLoad method.', + 'The button sprite has to be set either in onLoad or in the constructor', ); sprites = { ButtonState.up: button, ButtonState.down: buttonDown, }; - } - - @override - void onMount() { super.onMount(); - assert( - _button != null, - 'The button sprite has to be set either in onLoad or in the constructor', - ); } @override From 3b33ca4003d188f12443830a6f16c58e668cf6ec Mon Sep 17 00:00:00 2001 From: Lukas Klingsbo Date: Thu, 3 Oct 2024 21:50:23 +0200 Subject: [PATCH 3/3] fix: Don't update the sprites until onMount --- .../src/components/input/sprite_button_component.dart | 10 +++++++--- 1 file changed, 7 insertions(+), 3 deletions(-) diff --git a/packages/flame/lib/src/components/input/sprite_button_component.dart b/packages/flame/lib/src/components/input/sprite_button_component.dart index dc90c56007d..721497c3b9c 100644 --- a/packages/flame/lib/src/components/input/sprite_button_component.dart +++ b/packages/flame/lib/src/components/input/sprite_button_component.dart @@ -47,12 +47,16 @@ class SpriteButtonComponent extends SpriteGroupComponent set button(Sprite value) { _button = value; - updateSprite(ButtonState.up, value); + if (isLoaded) { + updateSprite(ButtonState.up, value); + } } set buttonDown(Sprite value) { _buttonDown = value; - updateSprite(ButtonState.down, value); + if (isLoaded) { + updateSprite(ButtonState.down, value); + } } @override @@ -62,7 +66,7 @@ class SpriteButtonComponent extends SpriteGroupComponent 'The button sprite has to be set either in onLoad or in the constructor', ); sprites = { - ButtonState.up: button, + ButtonState.up: _button!, ButtonState.down: buttonDown, }; super.onMount();