Skip to content

UI-A5 — Reduced motion and Preferences toggle #175

Description

@ZhuchkaTriplesix

Epic: #170
Depends on: #173 (UI-A1)

Source: docs/motion-and-high-refresh.md §4.3

Goal

Honor OS "reduce motion" and add an in-app motion preference in Preferences → Appearance.

Files

  • lib/core/motion/querya_motion.dart — extend effectiveDuration with in-app override
  • lib/core/storage/app_settings.dart — persist motion preference
  • lib/features/settings/preferences_appearance_section.dart — UI control
  • test/core/motion/querya_motion_test.dart
  • test/features/settings/preferences_appearance_section_test.dart

Implementation

  • OS level: MediaQuery.disableAnimationsOf(context) → collapse durations to instant (or minimal cross-fade).
  • In-app toggle: MotionFull / Reduced / Off (stored in AppSettings).
    • Full — use token durations.
    • Reduced — shorten all durations (~50%) or single short cross-fade.
    • Offinstant (0 ms) except essential feedback.
  • Wire through QueryaMotion.effectiveDuration / curve helper used by A2/A3 widgets.
  • Respect OS reduce-motion even when app setting is Full (OS wins).

Acceptance Criteria

  • OS reduce-motion disables long animations app-wide.
  • Preferences toggle persists across restart.
  • Widget test: disableAnimations: true → 0 ms effective duration.
  • flutter analyze clean.

Metadata

Metadata

Labels

accessibilityReduced motion, OS accessibility preferencesenhancementNew feature or requestfrontendTheme parser epic label: frontendmotionAnimation system, transitions, motion tokenssettingsTheme parser epic label: settings

Type

No type

Projects

No projects

Relationships

None yet

Development

No branches or pull requests

Issue actions