feat!: The HasTappableComponents mixin is no longer needed (#2450)

This PR is the second in a series of refactors that aim to simplify event handling in Flame. The approach is as follows:

    Added the MultiTapDispatcher component, which contains the logic that used to be within the HasTappableComponents mixin. This component is internal; it mounts to a FlameGame directly, and ensures that it is a singleton.
    Whenever any TapCallbacks component is added to a game, it automatically adds the MultiTapDispatcher component (unless there is already one), which in turn registers a tap gesture detector with GestureDetectorBuilder and rebuilds the game widget.

The end result is that now in order to make a component tappable you only need to add the TapCallbacks mixin to that component, everything else will be handled by the framework.

Consequently, the HasTappableComponents mixin is now empty and marked as deprecated.
This commit is contained in:
Lukas Klingsbo
2023-04-02 18:52:57 +02:00
committed by GitHub
parent 8319056477
commit b5bdf4ec17
89 changed files with 714 additions and 895 deletions

View File

@ -1,9 +1,9 @@
import 'package:flame/components.dart';
import 'package:flame/experimental.dart';
import 'package:flame/extensions.dart';
import 'package:flame/game.dart';
import 'package:flame/input.dart';
class PriorityExample extends FlameGame with HasTappables {
class PriorityExample extends FlameGame {
static const String description = '''
On this example, click on the square to bring them to the front by changing
the priority.
@ -21,7 +21,7 @@ class PriorityExample extends FlameGame with HasTappables {
}
class Square extends RectangleComponent
with HasGameRef<PriorityExample>, Tappable {
with HasGameRef<PriorityExample>, TapCallbacks {
Square(Vector2 position)
: super(
position: position,
@ -30,11 +30,10 @@ class Square extends RectangleComponent
);
@override
bool onTapDown(TapDownInfo info) {
void onTapDown(TapDownEvent info) {
final topComponent = gameRef.children.last;
if (topComponent != this) {
priority = topComponent.priority + 1;
}
return false;
}
}