fullscreen: fixed scale state monitoring on entry change
This commit is contained in:
parent
aa84512107
commit
e2cb03909a
1 changed files with 19 additions and 9 deletions
|
@ -404,6 +404,9 @@ class _FullscreenVerticalPageViewState extends State<FullscreenVerticalPageView>
|
||||||
super.didUpdateWidget(oldWidget);
|
super.didUpdateWidget(oldWidget);
|
||||||
_unregisterWidget(oldWidget);
|
_unregisterWidget(oldWidget);
|
||||||
_registerWidget(widget);
|
_registerWidget(widget);
|
||||||
|
if (oldWidget.entry != widget.entry) {
|
||||||
|
_onEntryChanged();
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@override
|
@override
|
||||||
|
@ -413,18 +416,17 @@ class _FullscreenVerticalPageViewState extends State<FullscreenVerticalPageView>
|
||||||
}
|
}
|
||||||
|
|
||||||
void _registerWidget(FullscreenVerticalPageView widget) {
|
void _registerWidget(FullscreenVerticalPageView widget) {
|
||||||
widget.verticalPager.addListener(_onVerticalPageControllerChange);
|
widget.verticalPager.addListener(_onVerticalPageControllerChanged);
|
||||||
widget.entry.imageChangeNotifier.addListener(_onImageChange);
|
widget.entry.imageChangeNotifier.addListener(_onImageChanged);
|
||||||
}
|
}
|
||||||
|
|
||||||
void _unregisterWidget(FullscreenVerticalPageView widget) {
|
void _unregisterWidget(FullscreenVerticalPageView widget) {
|
||||||
widget.verticalPager.removeListener(_onVerticalPageControllerChange);
|
widget.verticalPager.removeListener(_onVerticalPageControllerChanged);
|
||||||
widget.entry.imageChangeNotifier.removeListener(_onImageChange);
|
widget.entry.imageChangeNotifier.removeListener(_onImageChanged);
|
||||||
}
|
}
|
||||||
|
|
||||||
@override
|
@override
|
||||||
Widget build(BuildContext context) {
|
Widget build(BuildContext context) {
|
||||||
final onScaleChanged = (state) => setState(() => _isInitialScale = state == PhotoViewScaleState.initial);
|
|
||||||
final pages = [
|
final pages = [
|
||||||
// fake page for opacity transition between collection and fullscreen views
|
// fake page for opacity transition between collection and fullscreen views
|
||||||
const SizedBox(),
|
const SizedBox(),
|
||||||
|
@ -434,12 +436,12 @@ class _FullscreenVerticalPageViewState extends State<FullscreenVerticalPageView>
|
||||||
pageController: widget.horizontalPager,
|
pageController: widget.horizontalPager,
|
||||||
onTap: widget.onImageTap,
|
onTap: widget.onImageTap,
|
||||||
onPageChanged: widget.onHorizontalPageChanged,
|
onPageChanged: widget.onHorizontalPageChanged,
|
||||||
onScaleChanged: onScaleChanged,
|
onScaleChanged: _onScaleChanged,
|
||||||
videoControllers: widget.videoControllers,
|
videoControllers: widget.videoControllers,
|
||||||
)
|
)
|
||||||
: SingleImagePage(
|
: SingleImagePage(
|
||||||
entry: entry,
|
entry: entry,
|
||||||
onScaleChanged: onScaleChanged,
|
onScaleChanged: _onScaleChanged,
|
||||||
onTap: widget.onImageTap,
|
onTap: widget.onImageTap,
|
||||||
videoControllers: widget.videoControllers,
|
videoControllers: widget.videoControllers,
|
||||||
),
|
),
|
||||||
|
@ -474,12 +476,20 @@ class _FullscreenVerticalPageViewState extends State<FullscreenVerticalPageView>
|
||||||
);
|
);
|
||||||
}
|
}
|
||||||
|
|
||||||
void _onVerticalPageControllerChange() {
|
void _onVerticalPageControllerChanged() {
|
||||||
final opacity = min(1.0, widget.verticalPager.page);
|
final opacity = min(1.0, widget.verticalPager.page);
|
||||||
_backgroundColorNotifier.value = _backgroundColorNotifier.value.withOpacity(opacity * opacity);
|
_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 UriImage(uri: entry.uri, mimeType: entry.mimeType).evict();
|
||||||
await ThumbnailProvider(entry: entry, extent: Constants.thumbnailCacheExtent).evict();
|
await ThumbnailProvider(entry: entry, extent: Constants.thumbnailCacheExtent).evict();
|
||||||
if (entry.path != null) await FileImage(File(entry.path)).evict();
|
if (entry.path != null) await FileImage(File(entry.path)).evict();
|
||||||
|
|
Loading…
Reference in a new issue