diff --git a/CHANGELOG.md b/CHANGELOG.md
index 0f6648561..8ec0469f4 100644
--- a/CHANGELOG.md
+++ b/CHANGELOG.md
@@ -12,6 +12,7 @@ All notable changes to this project will be documented in this file.
### Changed
+- viewer: black background when overlay is disabled with light theme
- upgraded Flutter to beta v3.1.0-9.0.pre
## [v1.6.9] - 2022-06-18
diff --git a/lib/widgets/viewer/entry_vertical_pager.dart b/lib/widgets/viewer/entry_vertical_pager.dart
index 435be025d..ddab4e2a2 100644
--- a/lib/widgets/viewer/entry_vertical_pager.dart
+++ b/lib/widgets/viewer/entry_vertical_pager.dart
@@ -23,6 +23,7 @@ class ViewerVerticalPageView extends StatefulWidget {
final CollectionLens? collection;
final ValueNotifier entryNotifier;
final ViewerController viewerController;
+ final Animation overlayOpacity;
final PageController horizontalPager, verticalPager;
final void Function(int page) onVerticalPageChanged, onHorizontalPageChanged;
final VoidCallback onImagePageRequested;
@@ -33,6 +34,7 @@ class ViewerVerticalPageView extends StatefulWidget {
required this.collection,
required this.entryNotifier,
required this.viewerController,
+ required this.overlayOpacity,
required this.verticalPager,
required this.horizontalPager,
required this.onVerticalPageChanged,
@@ -145,9 +147,15 @@ class _ViewerVerticalPageViewState extends State {
return ValueListenableBuilder(
valueListenable: _backgroundOpacityNotifier,
builder: (context, backgroundOpacity, child) {
- final background = Theme.of(context).brightness == Brightness.dark ? Colors.black : Colors.white;
- return Container(
- color: background.withOpacity(backgroundOpacity),
+ return ValueListenableBuilder(
+ valueListenable: widget.overlayOpacity,
+ builder: (context, overlayOpacity, child) {
+ final background = Theme.of(context).brightness == Brightness.dark ? Colors.black : Color.lerp(Colors.black, Colors.white, overlayOpacity)!;
+ return Container(
+ color: background.withOpacity(backgroundOpacity),
+ child: child,
+ );
+ },
child: child,
);
},
diff --git a/lib/widgets/viewer/entry_viewer_stack.dart b/lib/widgets/viewer/entry_viewer_stack.dart
index 64b8ce03c..48dae48ac 100644
--- a/lib/widgets/viewer/entry_viewer_stack.dart
+++ b/lib/widgets/viewer/entry_viewer_stack.dart
@@ -62,9 +62,10 @@ class _EntryViewerStackState extends State with EntryViewContr
late ValueNotifier _currentVerticalPage;
late PageController _horizontalPager, _verticalPager;
final AChangeNotifier _verticalScrollNotifier = AChangeNotifier();
+ bool _overlayInitialized = false;
final ValueNotifier _overlayVisible = ValueNotifier(true);
late AnimationController _overlayAnimationController;
- late Animation _overlayButtonScale, _overlayVideoControlScale;
+ late Animation _overlayButtonScale, _overlayVideoControlScale, _overlayOpacity;
late Animation _overlayTopOffset;
EdgeInsets? _frozenViewInsets, _frozenViewPadding;
late VideoActionDelegate _videoActionDelegate;
@@ -129,6 +130,10 @@ class _EntryViewerStackState extends State with EntryViewContr
// no bounce at the bottom, to avoid video controller displacement
curve: Curves.easeOutQuad,
);
+ _overlayOpacity = CurvedAnimation(
+ parent: _overlayAnimationController,
+ curve: Curves.easeOutQuad,
+ );
_overlayTopOffset = Tween(begin: const Offset(0, -1), end: const Offset(0, 0)).animate(CurvedAnimation(
parent: _overlayAnimationController,
curve: Curves.easeOutQuad,
@@ -259,6 +264,11 @@ class _EntryViewerStackState extends State with EntryViewContr
collection: collection,
entryNotifier: entryNotifier,
viewerController: viewerController,
+ overlayOpacity: _overlayInitialized
+ ? _overlayOpacity
+ : settings.showOverlayOnOpening
+ ? kAlwaysCompleteAnimation
+ : kAlwaysDismissedAnimation,
verticalPager: _verticalPager,
horizontalPager: _horizontalPager,
onVerticalPageChanged: _onVerticalPageChanged,
@@ -644,6 +654,7 @@ class _EntryViewerStackState extends State with EntryViewContr
// to show overlay after hero animation is complete
await Future.delayed(ModalRoute.of(context)!.transitionDuration * timeDilation);
await _onOverlayVisibleChange();
+ _overlayInitialized = true;
}
Future _onOverlayVisibleChange({bool animate = true}) async {