mirror of
https://github.com/Xevion/paperless-mobile.git
synced 2025-12-08 22:07:57 -06:00
feat: add accessibility setting and conditionally disable animations
This commit is contained in:
89
lib/accessibility/accessibility_utils.dart
Normal file
89
lib/accessibility/accessibility_utils.dart
Normal file
@@ -0,0 +1,89 @@
|
||||
import 'dart:ui';
|
||||
|
||||
import 'package:flutter/widgets.dart';
|
||||
import 'package:flutter_animate/flutter_animate.dart';
|
||||
import 'package:hive/hive.dart';
|
||||
import 'package:paperless_mobile/core/database/hive/hive_config.dart';
|
||||
import 'package:paperless_mobile/core/database/hive/hive_extensions.dart';
|
||||
import 'package:paperless_mobile/features/settings/view/widgets/global_settings_builder.dart';
|
||||
import 'package:paperless_mobile/routing/navigation_keys.dart';
|
||||
|
||||
extension AccessibilityAwareAnimationDurationExtension on Duration {
|
||||
Duration accessible() {
|
||||
bool shouldDisableAnimations = WidgetsBinding.instance.disableAnimations ||
|
||||
Hive.globalSettingsBox.getValue()!.disableAnimations;
|
||||
// print(shouldDisableAnimations);
|
||||
if (shouldDisableAnimations) {
|
||||
return 0.seconds;
|
||||
}
|
||||
return this;
|
||||
}
|
||||
}
|
||||
|
||||
extension AccessibleHero on Hero {
|
||||
Widget accessible() {
|
||||
return GlobalSettingsBuilder(
|
||||
builder: (context, settings) {
|
||||
return HeroMode(
|
||||
enabled: WidgetsBinding.instance.disableAnimations ||
|
||||
!settings.disableAnimations,
|
||||
child: this,
|
||||
);
|
||||
},
|
||||
);
|
||||
// bool shouldDisableAnimations = WidgetsBinding.instance.disableAnimations ||
|
||||
// Hive.globalSettingsBox.getValue()!.disableAnimations;
|
||||
// return _AccessibilityAwareObserverWidget(
|
||||
// accessibilityAwareBuilder: (context, accessibilityFeatures) {
|
||||
// return HeroMode(
|
||||
// enabled: !accessibilityFeatures.disableAnimations,
|
||||
// child: this,
|
||||
// );
|
||||
// },
|
||||
// );
|
||||
}
|
||||
}
|
||||
|
||||
class _AccessibilityAwareObserverWidget extends StatefulWidget {
|
||||
final Widget Function(
|
||||
BuildContext context,
|
||||
AccessibilityFeatures accessibilityFeatures,
|
||||
) accessibilityAwareBuilder;
|
||||
const _AccessibilityAwareObserverWidget({
|
||||
super.key,
|
||||
required this.accessibilityAwareBuilder,
|
||||
});
|
||||
|
||||
@override
|
||||
State<_AccessibilityAwareObserverWidget> createState() =>
|
||||
_AccessibilityAwareObserverWidgetState();
|
||||
}
|
||||
|
||||
class _AccessibilityAwareObserverWidgetState
|
||||
extends State<_AccessibilityAwareObserverWidget>
|
||||
with WidgetsBindingObserver {
|
||||
late final AccessibilityFeatures _accessibilityFeatures;
|
||||
|
||||
@override
|
||||
void initState() {
|
||||
super.initState();
|
||||
_accessibilityFeatures = WidgetsBinding.instance.accessibilityFeatures;
|
||||
}
|
||||
|
||||
@override
|
||||
void didChangeAccessibilityFeatures() {
|
||||
super.didChangeAccessibilityFeatures();
|
||||
setState(() {
|
||||
_accessibilityFeatures = WidgetsBinding.instance.accessibilityFeatures;
|
||||
});
|
||||
print("Accessibility features changed");
|
||||
}
|
||||
|
||||
@override
|
||||
Widget build(BuildContext context) {
|
||||
return widget.accessibilityAwareBuilder(
|
||||
context,
|
||||
_accessibilityFeatures,
|
||||
);
|
||||
}
|
||||
}
|
||||
Reference in New Issue
Block a user