Build Proxy Confirmation Screen UI
epic-coordinator-proxy-registration-bulk-orchestration-task-004 — Implement the ProxyConfirmationScreen widget that presents a summary of a single proxy registration before final submission. Display mentor name, activity type, date, duration, and notes in a readable card layout. Include confirm and back actions with appropriate loading state while submission is in progress. Use design token system for all styling; no inline CSS.
Acceptance Criteria
Technical Requirements
Execution Context
Tier 1 - 540 tasks
Can start after Tier 0 completes
Implementation Notes
Receive the draft data as a constructor parameter (ProxyActivityDraft model) rather than reading from BLoC state directly — keeps the widget pure and easily testable. Use BlocBuilder only for the submission state (idle/loading/success/error). The back action should call `context.pop()` via GoRouter rather than `Navigator.pop()` to stay consistent with the routing layer. Apply the design token spacing system for all padding/margin values — reference the token constants file, not magic numbers.
Consider using a `Column` with `Spacer` for the action buttons to pin them to the bottom of the screen on short devices.
Testing Requirements
Widget tests using flutter_test covering: initial render with all fields populated, confirm tap transitions to loading state, back tap triggers correct navigation event, error state renders banner with correct message, notes truncation at 3 lines. Golden tests for the card layout at standard and large font scales. Accessibility audit using Flutter's SemanticsHandle to verify all interactive elements have labels.
Partial failures in bulk registration — where some mentors succeed and others fail — create a complex UX state that is easy to mishandle. If the UI does not clearly communicate which records succeeded and which failed, coordinators may re-submit already-saved records (creating duplicates) or miss failed records entirely (creating underreporting).
Mitigation & Contingency
Mitigation: Design the per-mentor result screen as a primary deliverable of this epic, not an afterthought. Use a clear list view with success/failure indicators per mentor name, and offer a 'Retry failed' action that pre-selects only the failed mentors for resubmission.
Contingency: If partial failure UX proves too complex to deliver within scope, implement a simpler all-or-nothing submission mode for the initial release with a clear error message listing which mentors failed, and defer the partial-retry UI to a follow-up sprint.
Submitting proxy records for a large group (e.g., 30+ mentors) as individual Supabase inserts may cause latency issues or hit rate limits, degrading the coordinator experience and potentially causing timeout failures that leave data in an inconsistent state.
Mitigation & Contingency
Mitigation: Implement the BulkRegistrationOrchestrator to batch inserts using a Supabase RPC call that accepts an array of proxy records, reducing round-trips to a single network call. Add progress indication using a stream of per-record results if the RPC supports it.
Contingency: If the RPC approach is blocked by Supabase limitations, fall back to chunked parallel inserts (5 records per batch) with retry logic, capping total submission time and surface a progress bar to manage coordinator expectations.
Unifying state management for both single and bulk proxy flows in a single BLoC risks state leakage between flows — for example, a previously selected mentor list persisting when a coordinator switches from bulk to single mode — causing confusing UI states or incorrect submissions.
Mitigation & Contingency
Mitigation: Define separate, named state subtrees within the BLoC for single-proxy state and bulk-proxy state, with explicit reset events triggered on flow entry. Write unit tests for state isolation scenarios using the bloc_test package.
Contingency: If unified BLoC state becomes unmanageable, split into two separate BLoCs (ProxySingleRegistrationBLoC and ProxyBulkRegistrationBLoC) sharing only common events via a parent coordinator Cubit.