From bf90ad0b6a8ff72e61f55fd72660f4c135a48d94 Mon Sep 17 00:00:00 2001 From: Thibault Deckers Date: Mon, 4 May 2020 13:02:53 +0900 Subject: [PATCH] improved scroll accuracy after scaling --- lib/widgets/album/grid/scaling.dart | 9 +++++++-- lib/widgets/album/thumbnail_collection.dart | 1 + 2 files changed, 8 insertions(+), 2 deletions(-) diff --git a/lib/widgets/album/grid/scaling.dart b/lib/widgets/album/grid/scaling.dart index 183b8c7a5..3169b57c7 100644 --- a/lib/widgets/album/grid/scaling.dart +++ b/lib/widgets/album/grid/scaling.dart @@ -13,6 +13,7 @@ import 'package:provider/provider.dart'; class GridScaleGestureDetector extends StatefulWidget { final GlobalKey scrollableKey; + final ValueNotifier appBarHeightNotifier; final ValueNotifier extentNotifier; final Size mqSize; final double mqHorizontalPadding; @@ -20,6 +21,7 @@ class GridScaleGestureDetector extends StatefulWidget { const GridScaleGestureDetector({ this.scrollableKey, + @required this.appBarHeightNotifier, @required this.extentNotifier, @required this.mqSize, @required this.mqHorizontalPadding, @@ -120,8 +122,11 @@ class _GridScaleGestureDetectorState extends State { final scrollableContext = widget.scrollableKey.currentContext; final gridSize = (scrollableContext.findRenderObject() as RenderBox).size; final sectionLayout = Provider.of(context, listen: false); - final tileRect = sectionLayout.getTileRect(_metadata.entry); - final scrollOffset = (tileRect?.top ?? 0) - gridSize.height / 2; + final tileRect = sectionLayout.getTileRect(_metadata.entry) ?? Rect.zero; + // most of the time the app bar will be scrolled away after scaling, + // so we compensate for it to center the focal point thumbnail + final appBarHeight = widget.appBarHeightNotifier.value; + final scrollOffset = tileRect.top + (tileRect.height - gridSize.height) / 2 + appBarHeight; viewportClosure.offset.jumpTo(max(.0, scrollOffset)); _applyingScale = false; }); diff --git a/lib/widgets/album/thumbnail_collection.dart b/lib/widgets/album/thumbnail_collection.dart index ebbefa2cc..901039601 100644 --- a/lib/widgets/album/thumbnail_collection.dart +++ b/lib/widgets/album/thumbnail_collection.dart @@ -38,6 +38,7 @@ class ThumbnailCollection extends StatelessWidget { final draggable = _buildDraggableScrollView(scrollView); final scaler = GridScaleGestureDetector( scrollableKey: _scrollableKey, + appBarHeightNotifier: _appBarHeightNotifier, extentNotifier: _tileExtentNotifier, mqSize: mqSize, mqHorizontalPadding: mqHorizontalPadding,