Mobile: add anchored reaction popover - #5025
Conversation
Signed-off-by: kenny lopez <klopez4212@gmail.com>
Signed-off-by: kenny lopez <klopez4212@gmail.com>
There was a problem hiding this comment.
💡 Codex Review
Here are some automated review suggestions for this pull request.
Reviewed commit: fca0644798
ℹ️ About Codex in GitHub
Your team has set up Codex to review pull requests in this repo. Reviews are triggered when you
- Open a pull request for review
- Mark a draft as ready
- Comment "@codex review".
If Codex has suggestions, it will comment; otherwise it will react with 👍.
Codex can also answer questions or update the PR. Try commenting "@codex address that feedback".
| GestureBinding.instance.cancelPointer(pointer); | ||
| recognize(); |
There was a problem hiding this comment.
Let descendant long presses win
When a user holds an existing reaction pill, its own GestureDetector invokes showReactionDetailSheet (reaction_row.dart:131), but this independent timer can also reach recognize() because it does not participate in the gesture arena. At the shared long-press deadline the child may already have accepted before cancelPointer runs, causing both modal routes to be pushed and the message reaction picker to cover the reactor-detail sheet. Use a gesture-arena-aware recognizer or otherwise suppress the parent callback when a descendant handles the long press.
Useful? React with 👍 / 👎.
| /// Links, media, reactions, and other nested controls keep their normal tap | ||
| /// gestures. Moving far enough to scroll cancels the timer; recognizing the | ||
| /// hold cancels the pointer so a descendant tap cannot fire on release. | ||
| class MessageLongPressRegion extends HookWidget { |
There was a problem hiding this comment.
Keep only one public widget in this file
This file introduces both MessageLongPressInkWell and MessageLongPressRegion as public widgets, contrary to the mobile convention requiring one public widget per file. Make the implementation widget private or move it to a sibling file so the public surface remains composable and file ownership stays unambiguous.
AGENTS.md reference: AGENTS.md:L545-L547
Useful? React with 👍 / 👎.


Summary
Testing
flutter analyzeflutter test(1,248 tests)