35 lines
1.2 KiB
Dart
35 lines
1.2 KiB
Dart
import 'package:flutter/widgets.dart';
|
|
|
|
/// 접근성 설정에 따른 모션 축소 여부 헬퍼
|
|
class ReduceMotion {
|
|
/// 플랫폼 접근성 설정을 기반으로 모션 축소 여부 반환 (context 없이 사용)
|
|
static bool platform() {
|
|
final features =
|
|
WidgetsBinding.instance.platformDispatcher.accessibilityFeatures;
|
|
// disableAnimations 신뢰
|
|
return features.disableAnimations;
|
|
}
|
|
|
|
/// MediaQuery/플랫폼 정보를 활용해 런타임에서 모션 축소 여부 반환
|
|
static bool isEnabled(BuildContext context) {
|
|
final mq = MediaQuery.maybeOf(context);
|
|
if (mq != null) {
|
|
// accessibleNavigation == 사용자가 단순한 네비게이션/애니메이션 선호
|
|
if (mq.accessibleNavigation) return true;
|
|
}
|
|
return platform();
|
|
}
|
|
|
|
/// 모션 강도 스케일 유틸리티
|
|
static double scale(BuildContext context,
|
|
{required double normal, required double reduced}) {
|
|
return isEnabled(context) ? reduced : normal;
|
|
}
|
|
|
|
/// 파티클 개수 등 정수 스케일링
|
|
static int count(BuildContext context,
|
|
{required int normal, required int reduced}) {
|
|
return isEnabled(context) ? reduced : normal;
|
|
}
|
|
}
|