Files
buzz/mobile/lib/features/profile
Wes bc9e7de904 fix(mobile): stop Settings rows blinking while Settings opens (#8463)
## Summary

On iOS, opening Settings made the Status, Profile and Notifications
cards disappear for most of the slide-up. They came back when the
transition finished. Closing Settings did the same thing.

**Cause:** Flutter's iOS compositor (`flow/view_slicer.cc`) puts Flutter
content that's painted after a platform view and overlaps no native view
into the background canvas. During the transition, Home's native nav bar
and glass tab bar are still on screen under the full-screen Settings
page, so the overlay created for Home's tab bar already covers the whole
background. Everything painted after the native presence pill, outside a
native view's rect, was hidden behind it. "Send identity to desktop"
stayed visible only because it overlaps Home's tab bar.

**Fix:** `IosPresenceMenu` mounts its native view only after its route
settles (animation completed, nothing covering it). During route
transitions, and while the native view is being created, it draws a
matching Flutter stand-in: same capsule, colors, SF Pro Text at the same
size and weight.

### Related issue

N/A, none found. Reported by Wes from a screen recording.

### Testing

- Reproduced in an uncommitted harness on an iOS 27 simulator: Home with
native nav bar and glass tabs, then `BottomUpPageRoute`, then a
Settings-shaped page using the real `IosPresenceMenu`. The cards blank
out on every open and close.
- A/B in the same harness: the blink goes away if any one of the three
is removed (native pill, Home nav bar, Home glass tabs).
- With this change, the open and close cycles in the harness show no
blank frames. At rest the native pill is mounted again. Its pixels are
identical to before, and the stand-in matches it within about 1px of
text rasterization.
- `settings_overlay_test.dart` now checks that the native pill isn't
mounted mid-transition, and that exactly one native view is created
after settling. The new assertion fails without the fix.
- Pre-push mobile checks passed: analyze, format, full mobile test
suite.

**Human test:** on iOS, open and close Settings from Home a few times.
Every card should stay visible throughout, and the "Online" pill should
open the native availability menu once Settings has settled.

🤖 Generated with [Claude Code](https://claude.com/claude-code)

---------

Signed-off-by: Wes <wesbillman@users.noreply.github.com>
Co-authored-by: Carl <32a2e2c9d428ee08902cab75d956da2c1d235a22d4766b0dd4138bf6e2e5db1d@buzz.block.builderlab.xyz>
Co-authored-by: Claude Opus 5.5 <noreply@anthropic.com>
2026-10-19 16:09:17 -06:00
..