minor system gesture insets handling improvements
This commit is contained in:
parent
718b4749a0
commit
7699c77044
2 changed files with 43 additions and 17 deletions
|
@ -1,5 +1,3 @@
|
||||||
import 'dart:math';
|
|
||||||
|
|
||||||
import 'package:aves/widgets/common/extensions/media_query.dart';
|
import 'package:aves/widgets/common/extensions/media_query.dart';
|
||||||
import 'package:flutter/material.dart';
|
import 'package:flutter/material.dart';
|
||||||
import 'package:provider/provider.dart';
|
import 'package:provider/provider.dart';
|
||||||
|
@ -13,21 +11,48 @@ class BottomGestureAreaProtector extends StatelessWidget {
|
||||||
|
|
||||||
@override
|
@override
|
||||||
Widget build(BuildContext context) {
|
Widget build(BuildContext context) {
|
||||||
return Selector<MediaQueryData, double>(
|
return Positioned(
|
||||||
selector: (context, mq) => mq.systemGestureInsets.bottom,
|
left: 0,
|
||||||
builder: (context, systemGestureBottom, child) {
|
right: 0,
|
||||||
return Positioned(
|
bottom: 0,
|
||||||
left: 0,
|
height: context.select<MediaQueryData, double>((mq) => mq.systemGestureInsets.bottom),
|
||||||
right: 0,
|
child: GestureDetector(
|
||||||
bottom: 0,
|
// absorb vertical gestures only
|
||||||
height: systemGestureBottom,
|
onVerticalDragDown: (details) {},
|
||||||
child: GestureDetector(
|
behavior: HitTestBehavior.translucent,
|
||||||
// absorb vertical gestures only
|
),
|
||||||
onVerticalDragDown: (details) {},
|
);
|
||||||
behavior: HitTestBehavior.translucent,
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
// It will prevent the body from scrolling when a user swipe from edges to use Android Q style navigation gestures.
|
||||||
|
class SideGestureAreaProtector extends StatelessWidget {
|
||||||
|
const SideGestureAreaProtector({Key? key}) : super(key: key);
|
||||||
|
|
||||||
|
@override
|
||||||
|
Widget build(BuildContext context) {
|
||||||
|
return Positioned.fill(
|
||||||
|
child: Row(
|
||||||
|
children: [
|
||||||
|
SizedBox(
|
||||||
|
width: context.select<MediaQueryData, double>((mq) => mq.systemGestureInsets.left),
|
||||||
|
child: GestureDetector(
|
||||||
|
// absorb horizontal gestures only
|
||||||
|
onHorizontalDragDown: (details) {},
|
||||||
|
behavior: HitTestBehavior.translucent,
|
||||||
|
),
|
||||||
),
|
),
|
||||||
);
|
const Spacer(),
|
||||||
},
|
SizedBox(
|
||||||
|
width: context.select<MediaQueryData, double>((mq) => mq.systemGestureInsets.right),
|
||||||
|
child: GestureDetector(
|
||||||
|
// absorb horizontal gestures only
|
||||||
|
onHorizontalDragDown: (details) {},
|
||||||
|
behavior: HitTestBehavior.translucent,
|
||||||
|
),
|
||||||
|
),
|
||||||
|
],
|
||||||
|
),
|
||||||
);
|
);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -58,7 +83,7 @@ class BottomPaddingSliver extends StatelessWidget {
|
||||||
Widget build(BuildContext context) {
|
Widget build(BuildContext context) {
|
||||||
return SliverToBoxAdapter(
|
return SliverToBoxAdapter(
|
||||||
child: Selector<MediaQueryData, double>(
|
child: Selector<MediaQueryData, double>(
|
||||||
selector: (context, mq) => max(mq.effectiveBottomPadding, mq.systemGestureInsets.bottom),
|
selector: (context, mq) => mq.effectiveBottomPadding,
|
||||||
builder: (context, mqPaddingBottom, child) {
|
builder: (context, mqPaddingBottom, child) {
|
||||||
return SizedBox(height: mqPaddingBottom);
|
return SizedBox(height: mqPaddingBottom);
|
||||||
},
|
},
|
||||||
|
|
|
@ -214,6 +214,7 @@ class _EntryViewerStackState extends State<EntryViewerStack> with FeedbackMixin,
|
||||||
),
|
),
|
||||||
_buildTopOverlay(),
|
_buildTopOverlay(),
|
||||||
_buildBottomOverlay(),
|
_buildBottomOverlay(),
|
||||||
|
const SideGestureAreaProtector(),
|
||||||
const BottomGestureAreaProtector(),
|
const BottomGestureAreaProtector(),
|
||||||
],
|
],
|
||||||
),
|
),
|
||||||
|
|
Loading…
Reference in a new issue