Implement confirmation dialog before tenant context swap
epic-organization-selection-and-onboarding-ui-task-007 — When a user taps a non-active org in MultiOrgContextSwitcher, show a modal confirmation dialog before executing the tenant swap. The dialog must display the name of the org being switched to, warn the user that their current context will change, and offer Confirm and Cancel actions. Only on confirmation should TenantContextService.switchTenant() be called. Accidental dismissal (back gesture, tap outside) should cancel without switching.
Acceptance Criteria
Technical Requirements
Execution Context
Tier 4 - 323 tasks
Can start after Tier 3 completes
Implementation Notes
Show the dialog using showDialog
Dispatch the ConfirmOrgSwitch(orgId) event to the MultiOrgContextSwitcherCubit only when the dialog returns true. Keep TenantContextService call out of the dialog itself — the dialog only returns a boolean decision.
Testing Requirements
Write widget tests: (1) tapping inactive org shows confirmation dialog with correct org name, (2) tapping active org does not show dialog, (3) tapping Confirm closes dialog and emits ConfirmOrgSwitch event to Cubit, (4) tapping Cancel closes dialog and Cubit remains in MultiOrgLoaded state (no switch initiated), (5) back gesture dismisses dialog without switching. Write Cubit unit test: (6) ConfirmOrgSwitch event triggers switchTenant call, (7) no switch occurs without explicit confirmation. Use flutter_test and bloc_test.
OrgSelectionScreen and OrgContextSwitcher render partner-specific logos, colors, and text from dynamic data. Golden tests (pixel-comparison screenshots) will fail whenever branding assets are updated in the backend, causing CI failures that block unrelated PRs and eroding developer trust in the test suite.
Mitigation & Contingency
Mitigation: Use fixture-based golden tests with static mock Organization models containing embedded test assets rather than network-fetched assets. Separate branding asset acceptance tests into a dedicated CI job that only runs on branding-related PRs and is maintained by the design team.
Contingency: If golden test maintenance overhead becomes excessive, replace pixel-comparison goldens with semantic widget tests that assert widget tree structure and key property values, reserving golden tests for only the most stable, design-critical elements.
Several partner organizations (especially Blindeforbundet) have users who rely entirely on VoiceOver or TalkBack. Complex branded card layouts with overlaid logos, names, and selection states are notoriously difficult to make fully accessible; missing semantics or incorrect focus order could make the selection screen completely unusable for screen reader users before launch.
Mitigation & Contingency
Mitigation: Involve an accessibility specialist in the design review before any widget implementation begins. Use Flutter's Semantics widget with explicit label, hint, and button role on OrgCardWidget. Conduct manual screen reader testing on both iOS (VoiceOver) and Android (TalkBack) for every sprint that touches these screens, not just before release.
Contingency: If full WCAG compliance cannot be achieved within the sprint, implement a simplified text-list fallback mode that activates when the system detects an active screen reader, presenting orgs as plain accessible list tiles instead of the branded card layout.