refactor!: The method onLoad() now returns FutureOr<void> (#2228)

Before this PR, the return type of onLoad() was Future<void>?, after this PR the return type is FutureOr<void> -- both for classes Component and Game.

Reasons:

The use of FutureOr is more idiomatic in Dart, this class was specifically created in order to be used in situations like ours.
This makes learning Flame easier for beginners, since you no longer need to explain what asynchronous programming is from the start (and onLoad() is one of the first methods the user encounters in Flame).
The code can be cleaner in case when onLoad doesn't need to be async.
With new approach, the onLoad() method can be overridden as either

@override
Future<void> onLoad() async { ... }
or

@override
void onLoad() { ... }
Of course, it can also be overridden as

@override
FutureOr<void> onLoad() { ... }
but this is rare, only for components that are designed to be further subclassed, or for mixins.

The documentation was updated to show the new recommended usage.
This commit is contained in:
Pasha Stetsenko
2022-12-23 12:30:40 -08:00
committed by GitHub
parent 19a1f09acc
commit d898b539f7
11 changed files with 122 additions and 112 deletions

View File

@ -50,7 +50,7 @@ class SkillsAnimationComponent extends RiveComponent with Tappable {
SMIInput<double>? _levelInput;
@override
Future<void>? onLoad() {
void onLoad() {
final controller = StateMachineController.fromArtboard(
artboard,
"Designer's Test",
@ -60,7 +60,6 @@ class SkillsAnimationComponent extends RiveComponent with Tappable {
_levelInput = controller.findInput<double>('Level');
_levelInput?.value = 0;
}
return super.onLoad();
}
@override