minor fixes

This commit is contained in:
Thibault Deckers 2020-06-05 12:35:35 +09:00
parent ef49888a22
commit 7a5ad21c36
2 changed files with 27 additions and 10 deletions

View file

@ -80,6 +80,7 @@ class _ThumbnailRasterImageState extends State<ThumbnailRasterImage> {
@override @override
Widget build(BuildContext context) { Widget build(BuildContext context) {
final fastImage = Image( final fastImage = Image(
key: const ValueKey('LQ'),
image: _fastThumbnailProvider, image: _fastThumbnailProvider,
width: extent, width: extent,
height: extent, height: extent,
@ -88,16 +89,24 @@ class _ThumbnailRasterImageState extends State<ThumbnailRasterImage> {
final image = _sizedThumbnailProvider == null final image = _sizedThumbnailProvider == null
? fastImage ? fastImage
: Image( : Image(
key: const ValueKey('HQ'),
frameBuilder: (context, child, frame, wasSynchronouslyLoaded) { frameBuilder: (context, child, frame, wasSynchronouslyLoaded) {
if (wasSynchronouslyLoaded) return child; if (wasSynchronouslyLoaded) return child;
return AnimatedSwitcher( return AnimatedSwitcher(
duration: const Duration(milliseconds: 200), duration: const Duration(milliseconds: 200),
transitionBuilder: (child, animation) => child == fastImage transitionBuilder: (child, animation) {
? child var shouldFade = true;
: FadeTransition( if (child is Image && child.image == _fastThumbnailProvider) {
opacity: animation, // directly show LQ thumbnail, only fade when switching from LQ to HQ
child: child, shouldFade = false;
), }
return shouldFade
? FadeTransition(
opacity: animation,
child: child,
)
: child;
},
child: frame == null ? fastImage : child, child: frame == null ? fastImage : child,
); );
}, },

View file

@ -74,7 +74,7 @@ class FullscreenBodyState extends State<FullscreenBody> with SingleTickerProvide
_horizontalPager = PageController(initialPage: _currentHorizontalPage); _horizontalPager = PageController(initialPage: _currentHorizontalPage);
_verticalPager = PageController(initialPage: _currentVerticalPage.value)..addListener(_onVerticalPageControllerChange); _verticalPager = PageController(initialPage: _currentVerticalPage.value)..addListener(_onVerticalPageControllerChange);
_overlayAnimationController = AnimationController( _overlayAnimationController = AnimationController(
duration: const Duration(milliseconds: 300), duration: const Duration(milliseconds: 200),
vsync: this, vsync: this,
); );
_topOverlayScale = CurvedAnimation( _topOverlayScale = CurvedAnimation(
@ -316,10 +316,14 @@ class FullscreenBodyState extends State<FullscreenBody> with SingleTickerProvide
await _onOverlayVisibleChange(); await _onOverlayVisibleChange();
} }
Future<void> _onOverlayVisibleChange() async { Future<void> _onOverlayVisibleChange({bool animate = true}) async {
if (_overlayVisible.value) { if (_overlayVisible.value) {
_showSystemUI(); _showSystemUI();
_overlayAnimationController.forward(); if (animate) {
_overlayAnimationController.forward();
} else {
_overlayAnimationController.value = _overlayAnimationController.upperBound;
}
} else { } else {
final mediaQuery = Provider.of<MediaQueryData>(context, listen: false); final mediaQuery = Provider.of<MediaQueryData>(context, listen: false);
setState(() { setState(() {
@ -327,7 +331,11 @@ class FullscreenBodyState extends State<FullscreenBody> with SingleTickerProvide
_frozenViewPadding = mediaQuery.viewPadding; _frozenViewPadding = mediaQuery.viewPadding;
}); });
_hideSystemUI(); _hideSystemUI();
await _overlayAnimationController.reverse(); if (animate) {
await _overlayAnimationController.reverse();
} else {
_overlayAnimationController.reset();
}
setState(() { setState(() {
_frozenViewInsets = null; _frozenViewInsets = null;
_frozenViewPadding = null; _frozenViewPadding = null;