Skip to content

chore: Update tutorials and examples to use new event system for pan - #4028

Merged
spydon merged 4 commits into
mainfrom
luan.unpan
Aug 30, 2026
Merged

chore: Update tutorials and examples to use new event system for pan#4028
spydon merged 4 commits into
mainfrom
luan.unpan

Conversation

@luanpotter

@luanpotter luanpotter commented Aug 30, 2026

Copy link
Copy Markdown
Member

Description

Update tutorials and examples to use new event system for pan, preparing for its ex-pan-gement.
The new system already covers all these with drags - so this is a no-op on all cases.
As per copilot's request, this also make all the examples safe from multi-touch causing issues - an edge case for the examples, but fine to fix (I might followup with a better solution).

Checklist

  • I have followed the Contributor Guide when preparing my PR.
  • I have updated/added tests for ALL new/updated/fixed functionality.
  • I have updated/added relevant documentation in docs and added dartdoc comments with ///.
  • I have updated/added relevant examples in examples or docs.

Breaking Change?

  • Yes, this PR is a breaking change.
  • No, this PR is not a breaking change.

Copilot AI left a comment

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Pull request overview

Migrates pan handling in tutorials and examples from legacy PanDetector APIs to component-based DragCallbacks.

Changes:

  • Replaces pan callbacks with drag events and updated coordinate APIs.
  • Preserves required superclass calls and removes obsolete imports.
  • Updates Space Shooter tutorial documentation and runnable steps.

Reviewed changes

Copilot reviewed 13 out of 13 changed files in this pull request and generated 6 comments.

Show a summary per file
File Description
packages/flame_bloc/example/lib/src/game/game.dart Migrates player controls to drag callbacks.
examples/lib/stories/rendering/particles_interactive_example.dart Migrates particle painting to drag events.
examples/lib/stories/camera_and_viewport/camera_component_example.dart Migrates magnifier controls to drag events.
doc/tutorials/space_shooter/step_2.md Updates initial drag-control instructions.
doc/tutorials/space_shooter/step_3.md Updates movement example.
doc/tutorials/space_shooter/step_4.md Updates movement and shooting callbacks.
doc/tutorials/space_shooter/step_6.md Updates the final game mixins.
doc/tutorials/space_shooter/app/lib/step2/main.dart Migrates step 2 implementation.
doc/tutorials/space_shooter/app/lib/step3/main.dart Migrates step 3 implementation.
doc/tutorials/space_shooter/app/lib/step4/main.dart Migrates step 4 implementation.
doc/tutorials/space_shooter/app/lib/step5/main.dart Migrates step 5 implementation.
doc/tutorials/space_shooter/app/lib/step6/main.dart Migrates step 6 implementation.
doc/flame/components/components.md Updates component-query example coordinates.

💡 Add a code-review agent skill or configure MCP servers for context-aware, tailored reviews. Learn more in the docs.

Comment thread packages/flame_bloc/example/lib/src/game/game.dart
Comment thread doc/tutorials/space_shooter/step_4.md
Comment thread doc/tutorials/space_shooter/app/lib/step4/main.dart
Comment thread doc/tutorials/space_shooter/app/lib/step5/main.dart
Comment thread doc/tutorials/space_shooter/app/lib/step6/main.dart
@luanpotter
luanpotter marked this pull request as ready for review August 30, 2026 17:14
@luanpotter
luanpotter requested a review from spydon August 30, 2026 17:14
@spydon
spydon enabled auto-merge (squash) August 30, 2026 17:33
@spydon
spydon merged commit d685b0c into main Aug 30, 2026
8 checks passed
@spydon
spydon deleted the luan.unpan branch August 30, 2026 17:37
luanpotter added a commit that referenced this pull request Aug 30, 2026
Kills `PanDetector` which was the last surviving heir of the game-level
detectors. With it dead is all the infra:

* the entire `src/gestures/`, including `events.dart` with `BaseInfo`,
`PositionInfo`, `EventPosition`, `EventDelta` and all `*Info` classes
(`TapDownInfo` and `TapUpInfo` were already dead but not cleansed);
* `GestureDetectorBuilder.initializeGestures`, which existed only to
wire the detectors onto recognizers, along with the
`..initializeGestures(this)` cascade on `Game` (this will allow some
further simplifications on gesture builder binding);
* The `this is PanDetector` early-return in
`FlameGame.containsEventHandlerAt` (it was redundant, as
`componentsAtPoint` yields the game itself last, so a `FlameGame` with a
positional callbacks mixin is still reported as a hit anywhere within
its bounds);
- All the old export blocks in the `events.dart` and `input.dart`
barrels.

Old `PanDetector` users should move to `DragCallbacks` (which as usual
can be mixed into `FlameGame` directly). The examples and tutorials were
migrated separately in #4028.

Also updates and restructure the entire events docs, with this last
mercy kill:
* `gesture_input.md` is deleted (it had become a second index page
duplicating `inputs.md`, plus cross-cutting sections that I re-homed);
* the event coordinate system and the Flutter gesture-API links move to
`inputs.md`, the mouse cursor section to `pointer_events.md`, and
panning-and-zooming folds into `scale_events.md`;
* Fixed two broken links. `collision_detection.md` pointed at
`inputs/gesture_input.md#gesturehitboxes`, but that section had moved to
`inputs.md` in #4011 without its inbound links being updated;
* The drag + scale combination was documented three times, with
`drag_events.md` and `scale_events.md` carrying byte-identical code
blocks. `scale_events.md` is now canonical and `drag_events.md`
cross-links to it;
* Dropped the stale "the old (legacy) approach is described in
gesture_input.md" notes from `tap_events.md` and `pointer_events.md`.
There is no longer an old approach;
* Dropped the "For other input documents, see also:" blocks from
`keyboard_input.md` and `other_inputs.md`. They date from #2063, when
`inputs/` held exactly three documents that each linked the other two;
the gesture third has since become five pages, none of which ever got
the block. No other doc grouping in the tree links back to its index or
lists siblings (navigation is the toctree);
* Documented that `localPosition` / `localDelta` are only valid inside
the callback, with `clone()` as the escape hatch if you need the value
later.

### The Breaking

`PanDetector`, `DragDownInfo`, `DragStartInfo`, `DragUpdateInfo`,
`DragEndInfo`,
`TapDownInfo`, `TapUpInfo`, `PositionInfo`,
`GestureDetectorBuilder.initializeGestures` killed; migration guide
section is included.

---------

Co-authored-by: Copilot Autofix powered by AI <175728472+Copilot@users.noreply.github.com>
spydon added a commit that referenced this pull request Aug 31, 2026
Add support for a `allowsMultiPointerDrag` on `DragCallbacks`, for easy
of use for components that would break under multiple concurrent drags.

When a drag controls the component itself, or a camera for panning,
initiating a multi-fingered interaction might cause an elated state on
the component, which might or might not be desirable depending on
circumstances. Many existing examples were fixed as part of the new
system migration (#4028; as
per requested by Copilot), but all with ad-hoc code that Flame could
vastly simplify. Note that is is _not_ to discourage two-, three- or
even five-fingered manipulations; but rather just to empower users to
choose what feels best for their application.

---------

Co-authored-by: Copilot Autofix powered by AI <175728472+Copilot@users.noreply.github.com>
Co-authored-by: Lukas Klingsbo <me@lukas.fyi>
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

3 participants