Implement PeerMentorConfirmationBanner widget
epic-pause-status-notifications-ui-task-006 — Build the Flutter inline toast/banner widget shown to peer mentors on pause activation and deactivation. Display a confirmation message that references the event type (paused or resumed) and the effective date. Apply the existing toast/banner pattern and design tokens so the component is visually consistent with other app banners. Implement auto-dismiss after a configurable short delay (default 4 seconds).
Acceptance Criteria
Technical Requirements
Execution Context
Tier 1 - 540 tasks
Can start after Tier 0 completes
Implementation Notes
Follow the existing toast/banner widget pattern in the codebase — do not create a new paradigm. Use `Timer` (not `Future.delayed`) for auto-dismiss so it can be cancelled reliably in `dispose`. Accept the model as a constructor parameter for full testability. The parent widget is responsible for removing the banner from the tree when `onDismiss` fires (e.g., using conditional rendering in BLoC state).
Do not use `OverlayEntry` — this is an inline banner, not a floating overlay. For the date format, use `intl` package's `DateFormat` consistent with other date displays in the app.
Testing Requirements
Widget tests: pump the widget with `pauseActivated` payload and verify the pause-specific message renders; pump with `pauseDeactivated` and verify the resume-specific message renders; verify the effective date appears in the expected format; advance `fakeAsync` clock by the auto-dismiss duration and confirm `onDismiss` is called exactly once; tap the close button and verify `onDismiss` is called immediately; verify the widget is removed from the tree after `onDismiss` is invoked by the parent; run accessibility checks with `expectAccessibility`. Golden test recommended for visual regression on both states.
The existing notification feed component may expect a specific notification model shape that does not map cleanly to the pause notification payload structure, requiring either payload transformation or feed refactoring.
Mitigation & Contingency
Mitigation: Review the notification-list-item and notification-model contracts before building the card. Design the pause-notification-card to extend or wrap the existing list item pattern rather than replacing it.
Contingency: If the feed contract is incompatible, implement a lightweight adapter that maps the pause notification payload to the feed's expected model shape, keeping the adapter isolated from the core card widget.
The app's existing toast/banner infrastructure may not support the auto-dismiss timeout duration or dismissal animation required for the peer mentor confirmation banner, necessitating a custom implementation that diverges from the design system.
Mitigation & Contingency
Mitigation: Audit the existing banner and toast components (in-app-notification-banner, notification-list-item) for configurable dismiss timeout before starting implementation. Prefer configuration over custom code.
Contingency: If the existing infrastructure cannot be configured, implement the banner as a thin wrapper with a custom auto-dismiss timer while reusing all visual tokens (colours, spacing, typography) from the design system to maintain consistency.