#1102 accessibility: enable/disable more animations

This commit is contained in:
Thibault Deckers 2024-07-28 20:05:35 +02:00
parent 1d2396193b
commit 05bb2ab350
2 changed files with 21 additions and 11 deletions

View file

@ -33,12 +33,12 @@ class ViewerVerticalPageView extends StatefulWidget {
final ValueNotifier<AvesEntry?> entryNotifier; final ValueNotifier<AvesEntry?> entryNotifier;
final ViewerController viewerController; final ViewerController viewerController;
final Animation<double> overlayOpacity; final Animation<double> overlayOpacity;
final PageController horizontalPager, verticalPager; final PageController verticalPager, horizontalPager;
final void Function(int page) onVerticalPageChanged, onHorizontalPageChanged; final void Function(int page) onVerticalPageChanged, onHorizontalPageChanged;
final VoidCallback onImagePageRequested; final VoidCallback onImagePageRequested;
final void Function(AvesEntry mainEntry, AvesEntry? pageEntry) onViewDisposed; final void Function(AvesEntry mainEntry, AvesEntry? pageEntry) onViewDisposed;
// critically damped spring a bit stiffer than `ScrollPhysics._kDefaultSpring` // critically damped spring (ratio = 1) a bit stiffer than `ScrollPhysics._kDefaultSpring`
static final spring = SpringDescription.withDampingRatio( static final spring = SpringDescription.withDampingRatio(
mass: 0.5, mass: 0.5,
stiffness: 140.0, stiffness: 140.0,
@ -78,6 +78,10 @@ class _ViewerVerticalPageViewState extends State<ViewerVerticalPageView> {
AvesEntry? get entry => widget.entryNotifier.value; AvesEntry? get entry => widget.entryNotifier.value;
PageController get verticalPager => widget.verticalPager;
PageController get horizontalPager => widget.horizontalPager;
static const double maximumBrightness = 1.0; static const double maximumBrightness = 1.0;
@override @override
@ -146,10 +150,10 @@ class _ViewerVerticalPageViewState extends State<ViewerVerticalPageView> {
return true; return true;
}, },
child: AnimatedBuilder( child: AnimatedBuilder(
animation: widget.verticalPager, animation: verticalPager,
builder: (context, child) { builder: (context, child) {
return Visibility( return Visibility(
visible: widget.verticalPager.page! > 1, visible: verticalPager.page! > 1,
child: child!, child: child!,
); );
}, },
@ -185,7 +189,7 @@ class _ViewerVerticalPageViewState extends State<ViewerVerticalPageView> {
// key is expected by test driver // key is expected by test driver
key: const Key('vertical-pageview'), key: const Key('vertical-pageview'),
scrollDirection: Axis.vertical, scrollDirection: Axis.vertical,
controller: widget.verticalPager, controller: verticalPager,
physics: MagnifierScrollerPhysics( physics: MagnifierScrollerPhysics(
gestureSettings: MediaQuery.gestureSettingsOf(context), gestureSettings: MediaQuery.gestureSettingsOf(context),
parent: SpringyScrollPhysics( parent: SpringyScrollPhysics(
@ -217,7 +221,7 @@ class _ViewerVerticalPageViewState extends State<ViewerVerticalPageView> {
child = MultiEntryScroller( child = MultiEntryScroller(
collection: collection!, collection: collection!,
viewerController: widget.viewerController, viewerController: widget.viewerController,
pageController: widget.horizontalPager, pageController: horizontalPager,
onPageChanged: widget.onHorizontalPageChanged, onPageChanged: widget.onHorizontalPageChanged,
onViewDisposed: widget.onViewDisposed, onViewDisposed: widget.onViewDisposed,
); );
@ -299,8 +303,7 @@ class _ViewerVerticalPageViewState extends State<ViewerVerticalPageView> {
} }
void _goToHorizontalPage(int delta, {required bool animate}) { void _goToHorizontalPage(int delta, {required bool animate}) {
final pageController = widget.horizontalPager; final page = horizontalPager.page?.round();
final page = pageController.page?.round();
final _collection = collection; final _collection = collection;
if (page != null && _collection != null) { if (page != null && _collection != null) {
var target = page + delta; var target = page + delta;
@ -308,19 +311,19 @@ class _ViewerVerticalPageViewState extends State<ViewerVerticalPageView> {
target = target.clamp(0, _collection.entryCount - 1); target = target.clamp(0, _collection.entryCount - 1);
} }
if (animate) { if (animate) {
pageController.animateToPage( horizontalPager.animateToPage(
target, target,
duration: ADurations.viewerHorizontalPageAnimation, duration: ADurations.viewerHorizontalPageAnimation,
curve: Curves.easeInOutCubic, curve: Curves.easeInOutCubic,
); );
} else { } else {
pageController.jumpToPage(target); horizontalPager.jumpToPage(target);
} }
} }
} }
void _onVerticalPageControllerChanged() { void _onVerticalPageControllerChanged() {
final page = widget.verticalPager.page!; final page = verticalPager.page!;
final opacity = min(1.0, page); final opacity = min(1.0, page);
_backgroundOpacityNotifier.value = opacity * opacity; _backgroundOpacityNotifier.value = opacity * opacity;

View file

@ -712,16 +712,23 @@ class _EntryViewerStackState extends State<EntryViewerStack> with EntryViewContr
void _onVerticalPageChanged(int page) { void _onVerticalPageChanged(int page) {
_currentVerticalPage.value = page; _currentVerticalPage.value = page;
_overrideSnackBarMargin(); _overrideSnackBarMargin();
final animate = context.read<Settings>().animate;
switch (page) { switch (page) {
case transitionPage: case transitionPage:
dismissFeedback(context); dismissFeedback(context);
_popVisual(); _popVisual();
if (!animate) {
_verticalPager.jumpToPage(page);
}
case imagePage: case imagePage:
reportService.log('Nav move to Image page'); reportService.log('Nav move to Image page');
case infoPage: case infoPage:
reportService.log('Nav move to Info page'); reportService.log('Nav move to Info page');
// prevent hero when viewer is offscreen // prevent hero when viewer is offscreen
_heroInfoNotifier.value = null; _heroInfoNotifier.value = null;
if (!animate) {
_verticalPager.jumpToPage(page);
}
} }
} }