From e2cb03909af7f4dc80cb1399c81b716ebf6b9675 Mon Sep 17 00:00:00 2001 From: Thibault Deckers Date: Mon, 18 May 2020 16:15:45 +0900 Subject: [PATCH] fullscreen: fixed scale state monitoring on entry change --- lib/widgets/fullscreen/fullscreen_body.dart | 28 ++++++++++++++------- 1 file changed, 19 insertions(+), 9 deletions(-) diff --git a/lib/widgets/fullscreen/fullscreen_body.dart b/lib/widgets/fullscreen/fullscreen_body.dart index 13cf7616a..1b5f9113a 100644 --- a/lib/widgets/fullscreen/fullscreen_body.dart +++ b/lib/widgets/fullscreen/fullscreen_body.dart @@ -404,6 +404,9 @@ class _FullscreenVerticalPageViewState extends State super.didUpdateWidget(oldWidget); _unregisterWidget(oldWidget); _registerWidget(widget); + if (oldWidget.entry != widget.entry) { + _onEntryChanged(); + } } @override @@ -413,18 +416,17 @@ class _FullscreenVerticalPageViewState extends State } void _registerWidget(FullscreenVerticalPageView widget) { - widget.verticalPager.addListener(_onVerticalPageControllerChange); - widget.entry.imageChangeNotifier.addListener(_onImageChange); + widget.verticalPager.addListener(_onVerticalPageControllerChanged); + widget.entry.imageChangeNotifier.addListener(_onImageChanged); } void _unregisterWidget(FullscreenVerticalPageView widget) { - widget.verticalPager.removeListener(_onVerticalPageControllerChange); - widget.entry.imageChangeNotifier.removeListener(_onImageChange); + widget.verticalPager.removeListener(_onVerticalPageControllerChanged); + widget.entry.imageChangeNotifier.removeListener(_onImageChanged); } @override Widget build(BuildContext context) { - final onScaleChanged = (state) => setState(() => _isInitialScale = state == PhotoViewScaleState.initial); final pages = [ // fake page for opacity transition between collection and fullscreen views const SizedBox(), @@ -434,12 +436,12 @@ class _FullscreenVerticalPageViewState extends State pageController: widget.horizontalPager, onTap: widget.onImageTap, onPageChanged: widget.onHorizontalPageChanged, - onScaleChanged: onScaleChanged, + onScaleChanged: _onScaleChanged, videoControllers: widget.videoControllers, ) : SingleImagePage( entry: entry, - onScaleChanged: onScaleChanged, + onScaleChanged: _onScaleChanged, onTap: widget.onImageTap, videoControllers: widget.videoControllers, ), @@ -474,12 +476,20 @@ class _FullscreenVerticalPageViewState extends State ); } - void _onVerticalPageControllerChange() { + void _onVerticalPageControllerChanged() { final opacity = min(1.0, widget.verticalPager.page); _backgroundColorNotifier.value = _backgroundColorNotifier.value.withOpacity(opacity * opacity); } - void _onImageChange() async { + void _onEntryChanged() { + _onScaleChanged(PhotoViewScaleState.initial); + } + + void _onScaleChanged(PhotoViewScaleState state) { + setState(() => _isInitialScale = state == PhotoViewScaleState.initial); + } + + void _onImageChanged() async { await UriImage(uri: entry.uri, mimeType: entry.mimeType).evict(); await ThumbnailProvider(entry: entry, extent: Constants.thumbnailCacheExtent).evict(); if (entry.path != null) await FileImage(File(entry.path)).evict();