refactor(card): migrate card onboarding screen header to HeaderStandard#30663
Conversation
|
CLA Signature Action: All authors have signed the CLA. You may need to manually re-run the blocking PR check if it doesn't pass in a few minutes. |
| style={tw.style('flex-1 bg-background-default')} | ||
| edges={['bottom']} | ||
| > | ||
| {renderHeader()} |
There was a problem hiding this comment.
Removed keyboardVerticalOffset causes iOS keyboard overlap
Medium Severity
The keyboardVerticalOffset prop was removed from KeyboardAvoidingView in the stickyActions branch, but the in-screen HeaderStandard (with includesTopInset) now occupies similar vertical space above it that the old navigator header did. The KeyboardAvoidingView defaults to offset 0, so on iOS it will over-compensate by the full header height (~90px), pushing sticky action buttons too high when the keyboard opens. Affects SetPhoneNumber, ConfirmPhoneNumber, and ConfirmEmail screens.
Reviewed by Cursor Bugbot for commit f270e45. Configure here.
There was a problem hiding this comment.
Cursor Bugbot has reviewed your changes and found 1 potential issue.
There are 2 total unresolved issues (including 1 from previous review).
❌ Bugbot Autofix is OFF. To automatically fix reported issues with cloud agents, have a team admin enable autofix in the Cursor dashboard.
Reviewed by Cursor Bugbot for commit f869685. Configure here.
…Mask/metamask-mobile into wsun/migrate-card-to-headerstandard
🔍 Smart E2E Test Selection
click to see 🤖 AI reasoning detailsE2E Test Selection:
The Performance Test Selection: |
|







Description
Migrate Card onboarding screens from navigator-rendered headers to in-screen HeaderStandard (from @metamask/design-system-react-native).
Why: This is a prerequisite for migrating the Card navigation stack from @react-navigation/stack (JS stack) to @react-navigation/native-stack. Native stack on iOS 26 / iPhone 17 Pro Max renders the system "liquid glass" navigation bar, which doesn't match the Card screens' flat bg-background-default and breaks visual consistency. By moving the header into each screen body, header styling becomes navigator-type-agnostic — the follow-up native-stack PR can then be a small, mechanical swap with no further header rework.
What changed:
Changelog
CHANGELOG entry: null
Related issues
Fixes:
Manual testing steps
Screenshots/Recordings
Before
After
Android test:
Screen_Recording_20260528_024042_MetaMask.mp4
Pre-merge author checklist
Performance checks (if applicable)
trace()for usage andaddTokenfor an exampleFor performance guidelines and tooling, see the Performance Guide.
Pre-merge reviewer checklist
Note
Low Risk
UI and navigation chrome refactor with preserved exit flows and E2E testIDs; no auth, payment, or data-model changes.
Overview
Card onboarding moves header chrome from the stack navigator into each screen via
OnboardingStepand design-systemHeaderStandard, so headers match the flat onboarding background and are ready for a future native-stack swap.OnboardingNavigatordrops per-screen header factories (PostEmailNavigationOptions,KYCStatusNavigationOptions, etc.) in favor of sharedheaderShown: false/gestureEnabled: false. A newuseCardOnboardingNavigationHandlershook centralizes back, close with exit alert → wallet home, and close direct → wallet home; each step passes aheaderMode. Theexit-onboarding-buttontestID is kept on close actions. Navigator option tests were removed in favor of hook unit tests; sticky-step layout no longer sets a fixed iOSkeyboardVerticalOffset.Reviewed by Cursor Bugbot for commit f6623ab. Bugbot is set up for automated code reviews on this repo. Configure here.