Skip to content

Add native-style mobile action menus - #5402

Closed
klopez4212 wants to merge 2 commits into
mainfrom
kennylopez-ios-native-message-actions
Closed

Add native-style mobile action menus#5402
klopez4212 wants to merge 2 commits into
mainfrom
kennylopez-ios-native-message-actions

Conversation

@klopez4212

Copy link
Copy Markdown
Contributor

Summary

  • present lifted message previews with native iOS actions and a matching curved Android action surface
  • keep the existing emoji reaction tray and add the same long-press treatment to Activity rows
  • use native iOS filter menus where supported while retaining Flutter fallbacks on other platforms

Why

Message and Activity actions previously relied on sheets or disconnected menus. This gives both platforms a compact, contextual presentation while preserving existing action and reaction behavior.

Validation

  • just mobile-check
  • full Flutter test suite (1,285 tests)
  • focused message and Activity widget tests (153 tests)
  • native iOS RunnerTests suite (29 tests)
  • installed and reviewed on a physical iPhone and Pixel 10

Signed-off-by: kenny lopez <klopez4212@gmail.com>
Signed-off-by: kenny lopez <klopez4212@gmail.com>
@klopez4212
klopez4212 marked this pull request as ready for review August 10, 2026 07:48
@klopez4212
klopez4212 requested a review from a team as a code owner August 10, 2026 07:48
@klopez4212
klopez4212 marked this pull request as draft August 10, 2026 07:50

@chatgpt-codex-connector chatgpt-codex-connector Bot left a comment

Copy link
Copy Markdown

Choose a reason for hiding this comment

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

💡 Codex Review

Here are some automated review suggestions for this pull request.

Reviewed commit: e298fcbb25

ℹ️ 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".

Comment on lines +188 to +189
snapshot.dispose();
if (context.mounted) onPopoverDismissed?.call();

Copy link
Copy Markdown

Choose a reason for hiding this comment

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

P1 Badge Retain the snapshot through the reverse transition

With animations enabled, the future returned by showGeneralDialog completes when Navigator.pop starts, while _MessageActionsPopover remains mounted and paints during the 240 ms reverse transition. Disposing snapshot here—and restoring the hidden source in the next line—can make those remaining frames render a disposed image or show both copies of the message. Defer disposal and onPopoverDismissed until the route unmounts or reaches AnimationStatus.dismissed, as the new Activity popover already does; the reaction-only iOS and Android paths contain the same lifecycle error.

Useful? React with 👍 / 👎.

Comment on lines +232 to +234
final safeTop = mediaQuery.padding.top + Grid.xxs;
final safeBottom =
constraints.maxHeight - mediaQuery.padding.bottom - Grid.xxs;

Copy link
Copy Markdown

Choose a reason for hiding this comment

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

P2 Badge Keep the action menu above the keyboard

When the composer keyboard remains open and the user long-presses a visible message, this layout treats the obscured keyboard area as available because safeBottom subtracts only system padding. The combined tray, preview, and action surface are therefore centered partly behind the keyboard, which can hide lower actions and make them untappable. Account for mediaQuery.viewInsets.bottom (and the top inset) here, as _MessageReactionPopover already does.

Useful? React with 👍 / 👎.

@klopez4212 klopez4212 closed this Aug 20, 2026
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.

1 participant