Infrastructure medium complexity mobile
1
Dependencies
0
Dependents
1
Entities
0
Integrations

Description

Centralises WCAG 2.2 AA accessibility logic for the summary feature. Generates semantically complete strings for each slide type so VoiceOver and TalkBack users receive a meaningful narration. Also manages reduced-motion mode: when the system accessibility setting is active, animations are replaced with instant transitions.

Feature: Annual Impact Summary (Wrapped)

summary-accessibility-provider

Summaries

The Summary Accessibility Provider ensures the platform is fully usable by users with visual impairments and motion sensitivities, directly reducing legal compliance risk and expanding the total addressable market to include users who rely on screen readers or reduced-motion settings. Compliance with WCAG 2.2 AA standards is increasingly a procurement requirement for institutional clients such as schools and healthcare organisations, making this component a direct enabler of enterprise sales opportunities. By delivering a first-class accessible experience, the product signals a strong commitment to inclusive design that differentiates it from competitors who treat accessibility as an afterthought, strengthening brand reputation, user trust, and eligibility for regulated market segments.

This medium-complexity accessibility component depends on the Wrapped Animation Controller, creating a hard sequencing dependency: the animation controller's setAnimationsEnabled interface must be designed and implemented before this provider can integrate reduced-motion propagation reliably. Development should include dedicated accessibility testing cycles using VoiceOver on physical iOS devices and TalkBack on Android, requiring both test devices and team members experienced with assistive technology workflows. Colour contrast validation logic requires early design sign-off on the dynamic colour palette used in stat cards. Budget one to two sprints for implementation plus additional QA cycles for accessibility auditing.

Accessibility defects discovered late in the project are significantly more costly to remediate, making early involvement of an accessibility reviewer a strongly recommended risk mitigation strategy.

This provider centralises all WCAG 2.2 AA concerns for the summary feature into a single injectable service, separating accessibility logic from widget rendering code. getSlideAnnouncement() generates semantically complete narration strings per slide type, enabling unit testing of accessibility copy independently of the widget tree. isReducedMotionEnabled() reads MediaQuery.disableAnimations from the platform and propagates the result to the Wrapped Animation Controller via setAnimationsEnabled(), establishing a clear integration contract. validateContrastRatio() implements the WCAG relative luminance algorithm and must be called whenever dynamic colours are applied to stat cards to catch contrast failures before render.

getFocusOrderForSlide() returns an ordered List for custom animated widgets that fall outside Flutter's default focus traversal order. announceToScreenReader() wraps SemanticsService.announce() to emit live region announcements for dynamically updated slide content.

Responsibilities

  • Generate VoiceOver/TalkBack announcement strings per slide type
  • Detect system reduced-motion preference and propagate to animation controller
  • Validate colour contrast ratios for dynamically generated stat card colours
  • Provide focus order management for custom animated widgets

Interfaces

getSlideAnnouncement(slide: SummarySlide): String
isReducedMotionEnabled(): bool
validateContrastRatio(foreground: Color, background: Color): bool
announceToScreenReader(message: String): void
getFocusOrderForSlide(slide: SummarySlide): List<FocusNode>

Relationships

Dependencies (1)

Components this component depends on

Related Data Entities (1)

Data entities managed by this component

API Contract

View full contract →
REST /api/v1/accessibility 9 endpoints
GET /api/v1/accessibility
GET /api/v1/accessibility/:id
POST /api/v1/accessibility
PUT /api/v1/accessibility/:id
DELETE /api/v1/accessibility/:id
GET /api/v1/accessibility/slides/:slide_id/announcement
+3 more