diff --git a/lib/widgets/viewer/entry_horizontal_pager.dart b/lib/widgets/viewer/entry_horizontal_pager.dart index 62b4ca225..52a5c9be1 100644 --- a/lib/widgets/viewer/entry_horizontal_pager.dart +++ b/lib/widgets/viewer/entry_horizontal_pager.dart @@ -29,6 +29,8 @@ class MultiEntryScroller extends StatefulWidget { class _MultiEntryScrollerState extends State with AutomaticKeepAliveClientMixin { List get entries => widget.collection.sortedEntries; + PageController get pageController => widget.pageController; + @override Widget build(BuildContext context) { super.build(context); @@ -38,7 +40,7 @@ class _MultiEntryScrollerState extends State with AutomaticK child: PageView.builder( key: const Key('horizontal-pageview'), scrollDirection: Axis.horizontal, - controller: widget.pageController, + controller: pageController, physics: const MagnifierScrollerPhysics(parent: BouncingScrollPhysics()), onPageChanged: widget.onPageChanged, itemBuilder: (context, index) { @@ -64,6 +66,23 @@ class _MultiEntryScrollerState extends State with AutomaticK } child ??= _buildViewer(entry); + child = AnimatedBuilder( + animation: pageController, + builder: (context, child) { + // parallax scrolling + double dx = 0; + if (pageController.hasClients && pageController.position.haveDimensions) { + final delta = pageController.page! - index; + dx = delta * pageController.position.viewportDimension / 2; + } + return Transform.translate( + offset: Offset(dx, 0), + child: child, + ); + }, + child: child, + ); + return ClipRect( child: child, );