settings/about use nav bar area

This commit is contained in:
Thibault Deckers 2022-03-18 10:22:49 +09:00
parent d3ed1a0d8e
commit ac21238ab4
4 changed files with 92 additions and 73 deletions

View file

@ -2,7 +2,9 @@ import 'package:aves/widgets/about/app_ref.dart';
import 'package:aves/widgets/about/bug_report.dart'; import 'package:aves/widgets/about/bug_report.dart';
import 'package:aves/widgets/about/credits.dart'; import 'package:aves/widgets/about/credits.dart';
import 'package:aves/widgets/about/licenses.dart'; import 'package:aves/widgets/about/licenses.dart';
import 'package:aves/widgets/common/basic/insets.dart';
import 'package:aves/widgets/common/extensions/build_context.dart'; import 'package:aves/widgets/common/extensions/build_context.dart';
import 'package:aves/widgets/common/providers/media_query_data_provider.dart';
import 'package:flutter/material.dart'; import 'package:flutter/material.dart';
class AboutPage extends StatelessWidget { class AboutPage extends StatelessWidget {
@ -12,11 +14,14 @@ class AboutPage extends StatelessWidget {
@override @override
Widget build(BuildContext context) { Widget build(BuildContext context) {
return Scaffold( return MediaQueryDataProvider(
child: Scaffold(
appBar: AppBar( appBar: AppBar(
title: Text(context.l10n.aboutPageTitle), title: Text(context.l10n.aboutPageTitle),
), ),
body: SafeArea( body: GestureAreaProtectorStack(
child: SafeArea(
bottom: false,
child: CustomScrollView( child: CustomScrollView(
slivers: [ slivers: [
SliverPadding( SliverPadding(
@ -35,9 +40,12 @@ class AboutPage extends StatelessWidget {
), ),
), ),
const Licenses(), const Licenses(),
const BottomPaddingSliver(),
], ],
), ),
), ),
),
),
); );
} }
} }

View file

@ -200,6 +200,8 @@ class _AvesAppState extends State<AvesApp> with WidgetsBindingObserver {
// save IDs of entries visible at the top of the collection page with current layout settings // save IDs of entries visible at the top of the collection page with current layout settings
void _saveTopEntries() { void _saveTopEntries() {
if (!settings.initialized) return;
final stopwatch = Stopwatch()..start(); final stopwatch = Stopwatch()..start();
final screenSize = window.physicalSize / window.devicePixelRatio; final screenSize = window.physicalSize / window.devicePixelRatio;
var tileExtent = settings.getTileExtent(CollectionPage.routeName); var tileExtent = settings.getTileExtent(CollectionPage.routeName);

View file

@ -1,4 +1,5 @@
import 'dart:convert'; import 'dart:convert';
import 'dart:math';
import 'dart:typed_data'; import 'dart:typed_data';
import 'package:aves/model/actions/settings_actions.dart'; import 'package:aves/model/actions/settings_actions.dart';
@ -8,8 +9,10 @@ import 'package:aves/services/common/services.dart';
import 'package:aves/theme/durations.dart'; import 'package:aves/theme/durations.dart';
import 'package:aves/theme/icons.dart'; import 'package:aves/theme/icons.dart';
import 'package:aves/widgets/common/action_mixins/feedback.dart'; import 'package:aves/widgets/common/action_mixins/feedback.dart';
import 'package:aves/widgets/common/basic/insets.dart';
import 'package:aves/widgets/common/basic/menu.dart'; import 'package:aves/widgets/common/basic/menu.dart';
import 'package:aves/widgets/common/extensions/build_context.dart'; import 'package:aves/widgets/common/extensions/build_context.dart';
import 'package:aves/widgets/common/extensions/media_query.dart';
import 'package:aves/widgets/common/providers/media_query_data_provider.dart'; import 'package:aves/widgets/common/providers/media_query_data_provider.dart';
import 'package:aves/widgets/settings/accessibility/accessibility.dart'; import 'package:aves/widgets/settings/accessibility/accessibility.dart';
import 'package:aves/widgets/settings/app_export/items.dart'; import 'package:aves/widgets/settings/app_export/items.dart';
@ -72,17 +75,22 @@ class _SettingsPageState extends State<SettingsPage> with FeedbackMixin {
), ),
], ],
), ),
body: Theme( body: GestureAreaProtectorStack(
child: SafeArea(
bottom: false,
child: Theme(
data: theme.copyWith( data: theme.copyWith(
textTheme: theme.textTheme.copyWith( textTheme: theme.textTheme.copyWith(
// dense style font for tile subtitles, without modifying title font // dense style font for tile subtitles, without modifying title font
bodyText2: const TextStyle(fontSize: 12), bodyText2: const TextStyle(fontSize: 12),
), ),
), ),
child: SafeArea(
child: AnimationLimiter( child: AnimationLimiter(
child: ListView( child: Selector<MediaQueryData, double>(
padding: const EdgeInsets.all(8), selector: (context, mq) => max(mq.effectiveBottomPadding, mq.systemGestureInsets.bottom),
builder: (context, mqPaddingBottom, child) {
return ListView(
padding: const EdgeInsets.all(8) + EdgeInsets.only(bottom: mqPaddingBottom),
children: AnimationConfiguration.toStaggeredList( children: AnimationConfiguration.toStaggeredList(
duration: durations.staggeredAnimation, duration: durations.staggeredAnimation,
delay: durations.staggeredAnimationDelay * timeDilation, delay: durations.staggeredAnimationDelay * timeDilation,
@ -103,6 +111,8 @@ class _SettingsPageState extends State<SettingsPage> with FeedbackMixin {
LanguageSection(expandedNotifier: _expandedNotifier), LanguageSection(expandedNotifier: _expandedNotifier),
], ],
), ),
);
}),
), ),
), ),
), ),

View file

@ -57,7 +57,8 @@ class _InfoPageState extends State<InfoPage> {
return ValueListenableBuilder<AvesEntry?>( return ValueListenableBuilder<AvesEntry?>(
valueListenable: widget.entryNotifier, valueListenable: widget.entryNotifier,
builder: (context, mainEntry, child) { builder: (context, mainEntry, child) {
if (mainEntry != null) { if (mainEntry == null) return const SizedBox();
Widget _buildContent({AvesEntry? pageEntry}) { Widget _buildContent({AvesEntry? pageEntry}) {
final targetEntry = pageEntry ?? mainEntry; final targetEntry = pageEntry ?? mainEntry;
return EmbeddedDataOpener( return EmbeddedDataOpener(
@ -79,8 +80,6 @@ class _InfoPageState extends State<InfoPage> {
builder: (pageEntry) => _buildContent(pageEntry: pageEntry), builder: (pageEntry) => _buildContent(pageEntry: pageEntry),
) )
: _buildContent(); : _buildContent();
}
return const SizedBox();
}, },
); );
}, },