fullscreen: prevent vertical scroll when zoomed in
This commit is contained in:
parent
1a6ed67893
commit
8759987dd7
1 changed files with 6 additions and 0 deletions
|
@ -23,6 +23,7 @@ class FullscreenPage extends StatefulWidget {
|
||||||
}
|
}
|
||||||
|
|
||||||
class FullscreenPageState extends State<FullscreenPage> with SingleTickerProviderStateMixin {
|
class FullscreenPageState extends State<FullscreenPage> with SingleTickerProviderStateMixin {
|
||||||
|
bool _isInitialScale = true;
|
||||||
int _currentHorizontalPage, _currentVerticalPage = 0;
|
int _currentHorizontalPage, _currentVerticalPage = 0;
|
||||||
PageController _horizontalPager, _verticalPager;
|
PageController _horizontalPager, _verticalPager;
|
||||||
ValueNotifier<bool> _overlayVisible = ValueNotifier(false);
|
ValueNotifier<bool> _overlayVisible = ValueNotifier(false);
|
||||||
|
@ -62,6 +63,7 @@ class FullscreenPageState extends State<FullscreenPage> with SingleTickerProvide
|
||||||
PageView(
|
PageView(
|
||||||
scrollDirection: Axis.vertical,
|
scrollDirection: Axis.vertical,
|
||||||
controller: _verticalPager,
|
controller: _verticalPager,
|
||||||
|
physics: _isInitialScale ? PageScrollPhysics() : NeverScrollableScrollPhysics(),
|
||||||
onPageChanged: (page) => setState(() => _currentVerticalPage = page),
|
onPageChanged: (page) => setState(() => _currentVerticalPage = page),
|
||||||
children: [
|
children: [
|
||||||
ImagePage(
|
ImagePage(
|
||||||
|
@ -69,6 +71,7 @@ class FullscreenPageState extends State<FullscreenPage> with SingleTickerProvide
|
||||||
pageController: _horizontalPager,
|
pageController: _horizontalPager,
|
||||||
onTap: () => _overlayVisible.value = !_overlayVisible.value,
|
onTap: () => _overlayVisible.value = !_overlayVisible.value,
|
||||||
onPageChanged: (page) => setState(() => _currentHorizontalPage = page),
|
onPageChanged: (page) => setState(() => _currentHorizontalPage = page),
|
||||||
|
onScaleChanged: (state) => setState(() => _isInitialScale = state == PhotoViewScaleState.initial),
|
||||||
),
|
),
|
||||||
InfoPage(
|
InfoPage(
|
||||||
entry: entries[_currentHorizontalPage],
|
entry: entries[_currentHorizontalPage],
|
||||||
|
@ -141,12 +144,14 @@ class ImagePage extends StatefulWidget {
|
||||||
final PageController pageController;
|
final PageController pageController;
|
||||||
final VoidCallback onTap;
|
final VoidCallback onTap;
|
||||||
final ValueChanged<int> onPageChanged;
|
final ValueChanged<int> onPageChanged;
|
||||||
|
final ValueChanged<PhotoViewScaleState> onScaleChanged;
|
||||||
|
|
||||||
const ImagePage({
|
const ImagePage({
|
||||||
this.entries,
|
this.entries,
|
||||||
this.pageController,
|
this.pageController,
|
||||||
this.onTap,
|
this.onTap,
|
||||||
this.onPageChanged,
|
this.onPageChanged,
|
||||||
|
this.onScaleChanged,
|
||||||
});
|
});
|
||||||
|
|
||||||
@override
|
@override
|
||||||
|
@ -174,6 +179,7 @@ class ImagePageState extends State<ImagePage> with AutomaticKeepAliveClientMixin
|
||||||
),
|
),
|
||||||
pageController: widget.pageController,
|
pageController: widget.pageController,
|
||||||
onPageChanged: widget.onPageChanged,
|
onPageChanged: widget.onPageChanged,
|
||||||
|
scaleStateChangedCallback: widget.onScaleChanged,
|
||||||
transitionOnUserGestures: true,
|
transitionOnUserGestures: true,
|
||||||
scrollPhysics: BouncingScrollPhysics(),
|
scrollPhysics: BouncingScrollPhysics(),
|
||||||
);
|
);
|
||||||
|
|
Loading…
Reference in a new issue