various insets fixes
This commit is contained in:
parent
33f00daa35
commit
0e10866fb5
7 changed files with 73 additions and 52 deletions
|
@ -44,6 +44,7 @@ class ThumbnailCollection extends StatelessWidget {
|
|||
Widget build(BuildContext context) {
|
||||
return HighlightInfoProvider(
|
||||
child: SafeArea(
|
||||
bottom: false,
|
||||
child: LayoutBuilder(
|
||||
builder: (context, constraints) {
|
||||
final viewportSize = constraints.biggest;
|
||||
|
|
|
@ -1,4 +1,7 @@
|
|||
import 'dart:math';
|
||||
|
||||
import 'package:flutter/material.dart';
|
||||
import 'package:provider/provider.dart';
|
||||
|
||||
// This widget should be added on top of Scaffolds with:
|
||||
// - `resizeToAvoidBottomInset` set to false,
|
||||
|
@ -11,12 +14,20 @@ class BottomGestureAreaProtector extends StatelessWidget {
|
|||
|
||||
@override
|
||||
Widget build(BuildContext context) {
|
||||
return Positioned(
|
||||
left: 0,
|
||||
right: 0,
|
||||
bottom: 0,
|
||||
height: systemGestureInsetsBottom,
|
||||
child: AbsorbPointer(),
|
||||
return Selector<MediaQueryData, double>(
|
||||
selector: (c, mq) => max(mq.viewPadding.bottom, mq.viewInsets.bottom),
|
||||
builder: (c, mqPaddingBottom, child) {
|
||||
// devices with physical navigation buttons have no bottom insets
|
||||
// we assume these devices do not use gesture navigation
|
||||
if (mqPaddingBottom == 0) return SizedBox();
|
||||
return Positioned(
|
||||
left: 0,
|
||||
right: 0,
|
||||
bottom: 0,
|
||||
height: systemGestureInsetsBottom,
|
||||
child: AbsorbPointer(),
|
||||
);
|
||||
},
|
||||
);
|
||||
}
|
||||
}
|
||||
|
|
|
@ -1,3 +1,4 @@
|
|||
import 'dart:math';
|
||||
import 'dart:ui';
|
||||
|
||||
import 'package:aves/model/filters/album.dart';
|
||||
|
@ -38,10 +39,52 @@ class _AppDrawerState extends State<AppDrawer> {
|
|||
|
||||
@override
|
||||
Widget build(BuildContext context) {
|
||||
final header = Container(
|
||||
final drawerItems = <Widget>[
|
||||
_buildHeader(context),
|
||||
allCollectionTile,
|
||||
videoTile,
|
||||
favouriteTile,
|
||||
_buildSpecialAlbumSection(),
|
||||
Divider(),
|
||||
albumListTile,
|
||||
countryListTile,
|
||||
tagListTile,
|
||||
Divider(),
|
||||
settingsTile,
|
||||
aboutTile,
|
||||
if (kDebugMode) ...[
|
||||
Divider(),
|
||||
debugTile,
|
||||
],
|
||||
];
|
||||
|
||||
return Drawer(
|
||||
child: Selector<MediaQueryData, double>(
|
||||
selector: (c, mq) => max(mq.viewPadding.bottom, mq.viewInsets.bottom),
|
||||
builder: (c, mqPaddingBottom, child) {
|
||||
return SingleChildScrollView(
|
||||
padding: EdgeInsets.only(bottom: mqPaddingBottom),
|
||||
child: Theme(
|
||||
data: Theme.of(context).copyWith(
|
||||
// color used by `ExpansionTile` for leading icon
|
||||
unselectedWidgetColor: Colors.white,
|
||||
),
|
||||
child: Column(
|
||||
children: drawerItems,
|
||||
),
|
||||
),
|
||||
);
|
||||
},
|
||||
),
|
||||
);
|
||||
}
|
||||
|
||||
Widget _buildHeader(BuildContext context) {
|
||||
return Container(
|
||||
padding: EdgeInsets.all(16),
|
||||
color: Theme.of(context).accentColor,
|
||||
child: SafeArea(
|
||||
bottom: false,
|
||||
child: Column(
|
||||
crossAxisAlignment: CrossAxisAlignment.start,
|
||||
children: [
|
||||
|
@ -66,45 +109,6 @@ class _AppDrawerState extends State<AppDrawer> {
|
|||
),
|
||||
),
|
||||
);
|
||||
|
||||
final drawerItems = <Widget>[
|
||||
header,
|
||||
allCollectionTile,
|
||||
videoTile,
|
||||
favouriteTile,
|
||||
_buildSpecialAlbumSection(),
|
||||
Divider(),
|
||||
albumListTile,
|
||||
countryListTile,
|
||||
tagListTile,
|
||||
Divider(),
|
||||
settingsTile,
|
||||
aboutTile,
|
||||
if (kDebugMode) ...[
|
||||
Divider(),
|
||||
debugTile,
|
||||
],
|
||||
];
|
||||
|
||||
return Drawer(
|
||||
child: Selector<MediaQueryData, double>(
|
||||
selector: (c, mq) => mq.viewInsets.bottom,
|
||||
builder: (c, mqViewInsetsBottom, child) {
|
||||
return SingleChildScrollView(
|
||||
padding: EdgeInsets.only(bottom: mqViewInsetsBottom),
|
||||
child: Theme(
|
||||
data: Theme.of(context).copyWith(
|
||||
// color used by `ExpansionTile` for leading icon
|
||||
unselectedWidgetColor: Colors.white,
|
||||
),
|
||||
child: Column(
|
||||
children: drawerItems,
|
||||
),
|
||||
),
|
||||
);
|
||||
},
|
||||
),
|
||||
);
|
||||
}
|
||||
|
||||
Widget _buildAlbumTile(String album) {
|
||||
|
|
|
@ -72,6 +72,7 @@ class FilterGridPage<T extends CollectionFilter> extends StatelessWidget {
|
|||
child: HighlightInfoProvider(
|
||||
child: GestureAreaProtectorStack(
|
||||
child: SafeArea(
|
||||
bottom: false,
|
||||
child: LayoutBuilder(
|
||||
builder: (context, constraints) {
|
||||
final viewportSize = constraints.biggest;
|
||||
|
|
|
@ -71,9 +71,12 @@ class _SearchPageState extends State<SearchPage> {
|
|||
}
|
||||
|
||||
void _onQueryChanged() {
|
||||
_debouncer(() => setState(() {
|
||||
// rebuild ourselves because query changed.
|
||||
}));
|
||||
_debouncer(() {
|
||||
if (mounted) {
|
||||
// rebuild ourselves because query changed.
|
||||
setState(() {});
|
||||
}
|
||||
});
|
||||
}
|
||||
|
||||
void _onSearchBodyChanged() {
|
||||
|
|
|
@ -43,6 +43,7 @@ class _InfoPageState extends State<InfoPage> {
|
|||
child: Scaffold(
|
||||
body: GestureAreaProtectorStack(
|
||||
child: SafeArea(
|
||||
bottom: false,
|
||||
child: NotificationListener(
|
||||
onNotification: _handleTopScroll,
|
||||
child: Selector<MediaQueryData, Tuple2<double, double>>(
|
||||
|
|
|
@ -97,10 +97,10 @@ class _PanoramaPageState extends State<PanoramaPage> {
|
|||
return Visibility(
|
||||
visible: overlayVisible,
|
||||
child: Selector<MediaQueryData, EdgeInsets>(
|
||||
selector: (c, mq) => mq.padding + mq.viewInsets,
|
||||
builder: (c, mqViewInsets, child) {
|
||||
selector: (c, mq) => mq.viewPadding + mq.viewInsets,
|
||||
builder: (c, mqPadding, child) {
|
||||
return Padding(
|
||||
padding: EdgeInsets.all(8) + EdgeInsets.only(right: mqViewInsets.right, bottom: mqViewInsets.bottom),
|
||||
padding: EdgeInsets.all(8) + EdgeInsets.only(right: mqPadding.right, bottom: mqPadding.bottom),
|
||||
child: OverlayButton(
|
||||
scale: kAlwaysCompleteAnimation,
|
||||
child: ValueListenableBuilder<SensorControl>(
|
||||
|
|
Loading…
Reference in a new issue