prevent conflict between drawer drag gesture and Android navigation gestures

This commit is contained in:
Thibault Deckers 2023-01-23 15:59:53 +01:00
parent 584e5cae6c
commit 8ce8eb8c71
41 changed files with 128 additions and 45 deletions

View file

@ -5,6 +5,7 @@ import 'package:aves/widgets/about/credits.dart';
import 'package:aves/widgets/about/licenses.dart';
import 'package:aves/widgets/about/translators.dart';
import 'package:aves/widgets/common/basic/insets.dart';
import 'package:aves/widgets/common/basic/scaffold.dart';
import 'package:aves/widgets/common/basic/tv_edge_focus.dart';
import 'package:aves/widgets/common/behaviour/pop/scope.dart';
import 'package:aves/widgets/common/behaviour/pop/tv_navigation.dart';
@ -50,7 +51,7 @@ class AboutPage extends StatelessWidget {
);
if (useTvLayout) {
return Scaffold(
return AvesScaffold(
body: AvesPopScope(
handlers: const [TvNavigationPopHandler.pop],
child: Row(
@ -69,7 +70,7 @@ class AboutPage extends StatelessWidget {
),
);
} else {
return Scaffold(
return AvesScaffold(
appBar: AppBar(
title: appBarTitle,
),

View file

@ -1,5 +1,6 @@
import 'package:aves/model/settings/settings.dart';
import 'package:aves/widgets/common/basic/markdown_container.dart';
import 'package:aves/widgets/common/basic/scaffold.dart';
import 'package:aves/widgets/common/extensions/build_context.dart';
import 'package:flutter/material.dart';
import 'package:flutter/services.dart';
@ -28,7 +29,7 @@ class _PolicyPageState extends State<PolicyPage> {
@override
Widget build(BuildContext context) {
return Scaffold(
return AvesScaffold(
appBar: AppBar(
automaticallyImplyLeading: !settings.useTvLayout,
title: Text(context.l10n.policyPageTitle),

View file

@ -29,6 +29,7 @@ import 'package:aves/utils/constants.dart';
import 'package:aves/utils/debouncer.dart';
import 'package:aves/widgets/collection/collection_grid.dart';
import 'package:aves/widgets/collection/collection_page.dart';
import 'package:aves/widgets/common/basic/scaffold.dart';
import 'package:aves/widgets/common/behaviour/route_tracker.dart';
import 'package:aves/widgets/common/behaviour/routes.dart';
import 'package:aves/widgets/common/extensions/build_context.dart';
@ -210,7 +211,7 @@ class _AvesAppState extends State<AvesApp> with WidgetsBindingObserver {
}
final home = initialized
? _getFirstPage()
: Scaffold(
: AvesScaffold(
body: snapshot.hasError ? _buildError(snapshot.error!) : const SizedBox(),
);
return Selector<Settings, Tuple3<Locale?, AvesThemeBrightness, bool>>(

View file

@ -16,6 +16,7 @@ import 'package:aves/theme/durations.dart';
import 'package:aves/widgets/collection/collection_grid.dart';
import 'package:aves/widgets/common/basic/draggable_scrollbar.dart';
import 'package:aves/widgets/common/basic/insets.dart';
import 'package:aves/widgets/common/basic/scaffold.dart';
import 'package:aves/widgets/common/behaviour/pop/double_back.dart';
import 'package:aves/widgets/common/behaviour/pop/scope.dart';
import 'package:aves/widgets/common/behaviour/pop/tv_navigation.dart';
@ -125,7 +126,7 @@ class _CollectionPageState extends State<CollectionPage> {
Widget page;
if (useTvLayout) {
page = Scaffold(
page = AvesScaffold(
body: Row(
children: [
TvRail(
@ -150,7 +151,7 @@ class _CollectionPageState extends State<CollectionPage> {
_draggableScrollBarEventStreamController.add(notification.event);
return false;
},
child: Scaffold(
child: AvesScaffold(
body: body,
floatingActionButton: _buildFab(context, hasSelection),
drawer: canNavigate ? AppDrawer(currentCollection: _collection) : null,

View file

@ -0,0 +1,43 @@
import 'package:flutter/material.dart';
import 'package:provider/provider.dart';
class AvesScaffold extends StatelessWidget {
final PreferredSizeWidget? appBar;
final Widget? body;
final Widget? floatingActionButton;
final Widget? drawer;
final Widget? bottomNavigationBar;
final Color? backgroundColor;
final bool? resizeToAvoidBottomInset;
final bool extendBody;
const AvesScaffold({
super.key,
this.appBar,
this.body,
this.floatingActionButton,
this.drawer,
this.bottomNavigationBar,
this.backgroundColor,
this.resizeToAvoidBottomInset,
this.extendBody = false,
});
@override
Widget build(BuildContext context) {
// prevent conflict between drawer drag gesture and Android navigation gestures
final drawerEnableOpenDragGesture = context.select<MediaQueryData, bool>((mq) => mq.systemGestureInsets.horizontal == 0);
return Scaffold(
appBar: appBar,
body: body,
floatingActionButton: floatingActionButton,
drawer: drawer,
bottomNavigationBar: bottomNavigationBar,
backgroundColor: backgroundColor,
resizeToAvoidBottomInset: resizeToAvoidBottomInset,
extendBody: extendBody,
drawerEnableOpenDragGesture: drawerEnableOpenDragGesture,
);
}
}

View file

@ -2,6 +2,7 @@ import 'dart:ui';
import 'package:aves/theme/durations.dart';
import 'package:aves/utils/debouncer.dart';
import 'package:aves/widgets/common/basic/scaffold.dart';
import 'package:aves/widgets/common/behaviour/pop/double_back.dart';
import 'package:aves/widgets/common/behaviour/pop/scope.dart';
import 'package:aves/widgets/common/behaviour/pop/tv_navigation.dart';
@ -123,7 +124,7 @@ class _SearchPageState extends State<SearchPage> {
case null:
break;
}
return Scaffold(
return AvesScaffold(
appBar: AppBar(
leading: Hero(
tag: AvesAppBar.leadingHeroTag,

View file

@ -9,6 +9,7 @@ import 'package:aves/services/analysis_service.dart';
import 'package:aves/theme/durations.dart';
import 'package:aves/utils/android_file_utils.dart';
import 'package:aves/widgets/common/basic/menu.dart';
import 'package:aves/widgets/common/basic/scaffold.dart';
import 'package:aves/widgets/common/behaviour/pop/scope.dart';
import 'package:aves/widgets/common/behaviour/pop/tv_navigation.dart';
import 'package:aves/widgets/common/identity/aves_expansion_tile.dart';
@ -44,7 +45,7 @@ class _AppDebugPageState extends State<AppDebugPage> {
Widget build(BuildContext context) {
return Directionality(
textDirection: TextDirection.ltr,
child: Scaffold(
child: AvesScaffold(
appBar: AppBar(
title: const Text('Debug'),
actions: [

View file

@ -8,6 +8,7 @@ import 'package:aves/theme/icons.dart';
import 'package:aves/utils/constants.dart';
import 'package:aves/widgets/collection/collection_grid.dart';
import 'package:aves/widgets/common/basic/menu.dart';
import 'package:aves/widgets/common/basic/scaffold.dart';
import 'package:aves/widgets/common/extensions/build_context.dart';
import 'package:aves/widgets/common/grid/theme.dart';
import 'package:aves/widgets/common/identity/buttons/outlined_button.dart';
@ -58,7 +59,7 @@ class _RenameEntrySetPageState extends State<RenameEntrySetPage> {
@override
Widget build(BuildContext context) {
final l10n = context.l10n;
return Scaffold(
return AvesScaffold(
appBar: AppBar(
title: Text(l10n.renameEntrySetPageTitle),
),

View file

@ -6,6 +6,7 @@ import 'package:aves/model/settings/settings.dart';
import 'package:aves/model/source/collection_source.dart';
import 'package:aves/theme/durations.dart';
import 'package:aves/theme/icons.dart';
import 'package:aves/widgets/common/basic/scaffold.dart';
import 'package:aves/widgets/common/expandable_filter_row.dart';
import 'package:aves/widgets/common/extensions/build_context.dart';
import 'package:aves/widgets/common/identity/aves_filter_chip.dart';
@ -61,7 +62,7 @@ class _TagEditorPageState extends State<TagEditorPage> {
});
List<MapEntry<CollectionFilter, int>> sortedTags = _sortCurrentTags(entryCountByTag);
return Scaffold(
return AvesScaffold(
appBar: AppBar(
title: Text(l10n.tagEditorPageTitle),
actions: [

View file

@ -4,6 +4,7 @@ import 'package:aves/services/common/services.dart';
import 'package:aves/utils/android_file_utils.dart';
import 'package:aves/widgets/common/basic/query_bar.dart';
import 'package:aves/widgets/common/basic/reselectable_radio_list_tile.dart';
import 'package:aves/widgets/common/basic/scaffold.dart';
import 'package:aves/widgets/common/extensions/build_context.dart';
import 'package:collection/collection.dart';
import 'package:flutter/material.dart';
@ -39,7 +40,7 @@ class _AppPickPageState extends State<AppPickPage> {
@override
Widget build(BuildContext context) {
final useTvLayout = settings.useTvLayout;
return Scaffold(
return AvesScaffold(
appBar: AppBar(
automaticallyImplyLeading: !useTvLayout,
title: Text(context.l10n.appPickDialogTitle),

View file

@ -5,6 +5,7 @@ import 'package:aves/model/source/collection_lens.dart';
import 'package:aves/widgets/collection/collection_grid.dart';
import 'package:aves/widgets/collection/collection_page.dart';
import 'package:aves/widgets/common/basic/insets.dart';
import 'package:aves/widgets/common/basic/scaffold.dart';
import 'package:aves/widgets/common/providers/query_provider.dart';
import 'package:aves/widgets/common/providers/selection_provider.dart';
import 'package:collection/collection.dart';
@ -39,7 +40,7 @@ class _ItemPickPageState extends State<ItemPickPage> {
final liveFilter = collection.filters.firstWhereOrNull((v) => v is QueryFilter && v.live) as QueryFilter?;
return ListenableProvider<ValueNotifier<AppMode>>.value(
value: ValueNotifier(AppMode.pickMediaInternal),
child: Scaffold(
child: AvesScaffold(
body: SelectionProvider<AvesEntry>(
child: QueryProvider(
initialQuery: liveFilter?.query,

View file

@ -10,6 +10,7 @@ import 'package:aves/theme/durations.dart';
import 'package:aves/theme/icons.dart';
import 'package:aves/utils/constants.dart';
import 'package:aves/utils/debouncer.dart';
import 'package:aves/widgets/common/basic/scaffold.dart';
import 'package:aves/widgets/common/extensions/build_context.dart';
import 'package:aves/widgets/common/identity/buttons/outlined_button.dart';
import 'package:aves/widgets/common/map/geo_map.dart';
@ -34,7 +35,7 @@ class LocationPickPage extends StatelessWidget {
@override
Widget build(BuildContext context) {
return Scaffold(
return AvesScaffold(
body: SafeArea(
left: false,
top: false,

View file

@ -13,6 +13,7 @@ import 'package:aves/theme/colors.dart';
import 'package:aves/theme/durations.dart';
import 'package:aves/widgets/common/basic/draggable_scrollbar.dart';
import 'package:aves/widgets/common/basic/insets.dart';
import 'package:aves/widgets/common/basic/scaffold.dart';
import 'package:aves/widgets/common/behaviour/pop/double_back.dart';
import 'package:aves/widgets/common/behaviour/pop/scope.dart';
import 'package:aves/widgets/common/behaviour/pop/tv_navigation.dart';
@ -117,7 +118,7 @@ class FilterGridPage<T extends CollectionFilter> extends StatelessWidget {
if (useTvLayout) {
final canNavigate = context.select<ValueNotifier<AppMode>, bool>((v) => v.value.canNavigate);
return Scaffold(
return AvesScaffold(
body: canNavigate
? Row(
children: [
@ -148,7 +149,7 @@ class FilterGridPage<T extends CollectionFilter> extends StatelessWidget {
_draggableScrollBarEventStreamController.add(notification.event);
return false;
},
child: Scaffold(
child: AvesScaffold(
body: body,
drawer: canNavigate ? const AppDrawer() : null,
bottomNavigationBar: showBottomNavigationBar

View file

@ -18,6 +18,7 @@ import 'package:aves/services/widget_service.dart';
import 'package:aves/utils/android_file_utils.dart';
import 'package:aves/utils/constants.dart';
import 'package:aves/widgets/collection/collection_page.dart';
import 'package:aves/widgets/common/basic/scaffold.dart';
import 'package:aves/widgets/common/behaviour/routes.dart';
import 'package:aves/widgets/common/extensions/build_context.dart';
import 'package:aves/widgets/common/search/page.dart';
@ -88,7 +89,7 @@ class _HomePageState extends State<HomePage> {
}
@override
Widget build(BuildContext context) => const Scaffold();
Widget build(BuildContext context) => const AvesScaffold();
Future<void> _setup() async {
final stopwatch = Stopwatch()..start();

View file

@ -19,6 +19,7 @@ import 'package:aves/widgets/collection/collection_page.dart';
import 'package:aves/widgets/collection/entry_set_action_delegate.dart';
import 'package:aves/widgets/common/basic/insets.dart';
import 'package:aves/widgets/common/basic/menu.dart';
import 'package:aves/widgets/common/basic/scaffold.dart';
import 'package:aves/widgets/common/behaviour/routes.dart';
import 'package:aves/widgets/common/extensions/build_context.dart';
import 'package:aves/widgets/common/identity/buttons/captioned_button.dart';
@ -59,7 +60,7 @@ class MapPage extends StatelessWidget {
// as the map can be stacked on top of other pages
// that catch highlight events and will not let it bubble up
return HighlightInfoProvider(
child: Scaffold(
child: AvesScaffold(
body: SafeArea(
left: false,
top: false,

View file

@ -4,6 +4,7 @@ import 'package:aves/theme/durations.dart';
import 'package:aves/theme/icons.dart';
import 'package:aves/utils/change_notifier.dart';
import 'package:aves/utils/constants.dart';
import 'package:aves/widgets/common/basic/scaffold.dart';
import 'package:aves/widgets/common/extensions/build_context.dart';
import 'package:aves/widgets/common/identity/buttons/captioned_button.dart';
import 'package:aves/widgets/common/identity/buttons/overlay_button.dart';
@ -37,7 +38,7 @@ class QuickActionEditorPage<T extends Object> extends StatelessWidget {
@override
Widget build(BuildContext context) {
return Scaffold(
return AvesScaffold(
appBar: AppBar(
title: Text(title),
),

View file

@ -8,6 +8,7 @@ import 'package:aves/services/widget_service.dart';
import 'package:aves/theme/durations.dart';
import 'package:aves/theme/icons.dart';
import 'package:aves/utils/constants.dart';
import 'package:aves/widgets/common/basic/scaffold.dart';
import 'package:aves/widgets/common/extensions/build_context.dart';
import 'package:aves/widgets/common/fx/borders.dart';
import 'package:aves/widgets/common/identity/buttons/outlined_button.dart';
@ -67,7 +68,7 @@ class _HomeWidgetSettingsPageState extends State<HomeWidgetSettingsPage> {
@override
Widget build(BuildContext context) {
final l10n = context.l10n;
return Scaffold(
return AvesScaffold(
appBar: AppBar(
title: Text(l10n.settingsWidgetPageTitle),
),

View file

@ -4,6 +4,7 @@ import 'package:aves/model/settings/settings.dart';
import 'package:aves/widgets/aves_app.dart';
import 'package:aves/widgets/common/basic/query_bar.dart';
import 'package:aves/widgets/common/basic/reselectable_radio_list_tile.dart';
import 'package:aves/widgets/common/basic/scaffold.dart';
import 'package:aves/widgets/common/extensions/build_context.dart';
import 'package:aves/widgets/settings/language/locale_tile.dart';
import 'package:collection/collection.dart';
@ -31,7 +32,7 @@ class _LocaleSelectionPageState extends State<LocaleSelectionPage> {
@override
Widget build(BuildContext context) {
final useTvLayout = settings.useTvLayout;
return Scaffold(
return AvesScaffold(
appBar: AppBar(
automaticallyImplyLeading: !useTvLayout,
title: Text(context.l10n.settingsLanguagePageTitle),

View file

@ -1,4 +1,5 @@
import 'package:aves/model/settings/settings.dart';
import 'package:aves/widgets/common/basic/scaffold.dart';
import 'package:aves/widgets/common/extensions/build_context.dart';
import 'package:aves/widgets/settings/common/tiles.dart';
import 'package:flutter/material.dart';
@ -11,7 +12,7 @@ class ConfirmationDialogPage extends StatelessWidget {
@override
Widget build(BuildContext context) {
final l10n = context.l10n;
return Scaffold(
return AvesScaffold(
appBar: AppBar(
title: Text(l10n.settingsConfirmationDialogTitle),
),

View file

@ -1,6 +1,7 @@
import 'package:aves/model/filters/filters.dart';
import 'package:aves/model/filters/recent.dart';
import 'package:aves/model/settings/settings.dart';
import 'package:aves/widgets/common/basic/scaffold.dart';
import 'package:aves/widgets/common/extensions/build_context.dart';
import 'package:aves/widgets/common/search/page.dart';
import 'package:aves/widgets/filter_grids/albums_page.dart';
@ -91,7 +92,7 @@ class _NavigationDrawerEditorPageState extends State<NavigationDrawerEditorPage>
return DefaultTabController(
length: tabs.length,
child: Scaffold(
child: AvesScaffold(
appBar: AppBar(
automaticallyImplyLeading: !settings.useTvLayout,
title: Text(l10n.settingsNavigationDrawerEditorPageTitle),

View file

@ -1,5 +1,6 @@
import 'package:aves/services/common/services.dart';
import 'package:aves/theme/icons.dart';
import 'package:aves/widgets/common/basic/scaffold.dart';
import 'package:aves/widgets/common/extensions/build_context.dart';
import 'package:aves/widgets/common/identity/empty.dart';
import 'package:flutter/material.dart';
@ -27,7 +28,7 @@ class _StorageAccessPageState extends State<StorageAccessPage> {
@override
Widget build(BuildContext context) {
return Scaffold(
return AvesScaffold(
appBar: AppBar(
title: Text(context.l10n.settingsStorageAccessPageTitle),
),

View file

@ -7,6 +7,7 @@ import 'package:aves/theme/icons.dart';
import 'package:aves/utils/android_file_utils.dart';
import 'package:aves/utils/constants.dart';
import 'package:aves/widgets/common/basic/menu.dart';
import 'package:aves/widgets/common/basic/scaffold.dart';
import 'package:aves/widgets/common/extensions/build_context.dart';
import 'package:aves/widgets/common/identity/buttons/outlined_button.dart';
import 'package:aves/widgets/common/identity/empty.dart';
@ -64,7 +65,7 @@ class _FilePickerPageState extends State<FilePickerPage> {
setState(() {});
return SynchronousFuture(false);
},
child: Scaffold(
child: AvesScaffold(
appBar: AppBar(
title: Text(_getTitle(context)),
actions: [

View file

@ -3,6 +3,7 @@ import 'package:aves/model/filters/path.dart';
import 'package:aves/model/settings/settings.dart';
import 'package:aves/theme/durations.dart';
import 'package:aves/theme/icons.dart';
import 'package:aves/widgets/common/basic/scaffold.dart';
import 'package:aves/widgets/common/extensions/build_context.dart';
import 'package:aves/widgets/common/identity/aves_filter_chip.dart';
import 'package:aves/widgets/common/identity/buttons/outlined_button.dart';
@ -34,7 +35,7 @@ class HiddenItemsPage extends StatelessWidget {
return DefaultTabController(
length: tabs.length,
child: Scaffold(
child: AvesScaffold(
appBar: AppBar(
automaticallyImplyLeading: !settings.useTvLayout,
title: Text(l10n.settingsHiddenItemsPageTitle),

View file

@ -3,6 +3,7 @@ import 'package:aves/model/settings/enums/enums.dart';
import 'package:aves/model/settings/enums/slideshow_video_playback.dart';
import 'package:aves/model/settings/enums/viewer_transition.dart';
import 'package:aves/model/settings/settings.dart';
import 'package:aves/widgets/common/basic/scaffold.dart';
import 'package:aves/widgets/common/extensions/build_context.dart';
import 'package:aves/widgets/settings/common/collection_tile.dart';
import 'package:aves/widgets/settings/common/tiles.dart';
@ -17,7 +18,7 @@ class ScreenSaverSettingsPage extends StatelessWidget {
@override
Widget build(BuildContext context) {
final l10n = context.l10n;
return Scaffold(
return AvesScaffold(
appBar: AppBar(
title: Text(l10n.settingsScreenSaverPageTitle),
),

View file

@ -13,6 +13,7 @@ import 'package:aves/widgets/common/action_mixins/feedback.dart';
import 'package:aves/widgets/common/app_bar/app_bar_title.dart';
import 'package:aves/widgets/common/basic/insets.dart';
import 'package:aves/widgets/common/basic/menu.dart';
import 'package:aves/widgets/common/basic/scaffold.dart';
import 'package:aves/widgets/common/behaviour/pop/scope.dart';
import 'package:aves/widgets/common/behaviour/pop/tv_navigation.dart';
import 'package:aves/widgets/common/extensions/build_context.dart';
@ -74,7 +75,7 @@ class _SettingsPageState extends State<SettingsPage> with FeedbackMixin {
final appBarTitle = Text(context.l10n.settingsPageTitle);
if (settings.useTvLayout) {
return Scaffold(
return AvesScaffold(
body: AvesPopScope(
handlers: const [TvNavigationPopHandler.pop],
child: Row(
@ -148,7 +149,7 @@ class _SettingsPageState extends State<SettingsPage> with FeedbackMixin {
),
);
} else {
return Scaffold(
return AvesScaffold(
appBar: AppBar(
title: InteractiveAppBarTitle(
onTap: () => _goToSearch(context),

View file

@ -1,5 +1,6 @@
import 'package:aves/model/actions/entry_set_actions.dart';
import 'package:aves/model/settings/settings.dart';
import 'package:aves/widgets/common/basic/scaffold.dart';
import 'package:aves/widgets/common/extensions/build_context.dart';
import 'package:aves/widgets/settings/common/quick_actions/editor_page.dart';
import 'package:flutter/material.dart';
@ -43,7 +44,7 @@ class CollectionActionEditorPage extends StatelessWidget {
return DefaultTabController(
length: tabs.length,
child: Scaffold(
child: AvesScaffold(
appBar: AppBar(
title: Text(context.l10n.settingsCollectionQuickActionEditorPageTitle),
bottom: TabBar(

View file

@ -5,6 +5,7 @@ import 'package:aves/model/settings/settings.dart';
import 'package:aves/theme/colors.dart';
import 'package:aves/theme/durations.dart';
import 'package:aves/theme/icons.dart';
import 'package:aves/widgets/common/basic/scaffold.dart';
import 'package:aves/widgets/common/extensions/build_context.dart';
import 'package:aves/widgets/common/identity/aves_icons.dart';
import 'package:aves/widgets/settings/common/tiles.dart';
@ -22,7 +23,7 @@ class ThumbnailOverlayPage extends StatelessWidget {
final iconSize = _getIconSize(context);
final iconColor = _getIconColor(context);
return Scaffold(
return AvesScaffold(
appBar: AppBar(
automaticallyImplyLeading: !settings.useTvLayout,
title: Text(context.l10n.settingsThumbnailOverlayPageTitle),

View file

@ -1,6 +1,7 @@
import 'package:aves/model/settings/enums/enums.dart';
import 'package:aves/model/settings/enums/video_controls.dart';
import 'package:aves/model/settings/settings.dart';
import 'package:aves/widgets/common/basic/scaffold.dart';
import 'package:aves/widgets/common/extensions/build_context.dart';
import 'package:aves/widgets/settings/common/tiles.dart';
import 'package:flutter/material.dart';
@ -12,7 +13,7 @@ class VideoControlsPage extends StatelessWidget {
@override
Widget build(BuildContext context) {
return Scaffold(
return AvesScaffold(
appBar: AppBar(
title: Text(context.l10n.settingsVideoControlsPageTitle),
),

View file

@ -2,6 +2,7 @@ import 'package:aves/model/settings/enums/enums.dart';
import 'package:aves/model/settings/enums/subtitle_position.dart';
import 'package:aves/model/settings/settings.dart';
import 'package:aves/widgets/common/basic/color_list_tile.dart';
import 'package:aves/widgets/common/basic/scaffold.dart';
import 'package:aves/widgets/common/basic/slider_list_tile.dart';
import 'package:aves/widgets/common/extensions/build_context.dart';
import 'package:aves/widgets/settings/common/tiles.dart';
@ -16,7 +17,7 @@ class SubtitleThemePage extends StatelessWidget {
@override
Widget build(BuildContext context) {
return Scaffold(
return AvesScaffold(
appBar: AppBar(
automaticallyImplyLeading: !settings.useTvLayout,
title: Text(context.l10n.settingsSubtitleThemePageTitle),

View file

@ -1,6 +1,7 @@
import 'dart:async';
import 'package:aves/model/settings/settings.dart';
import 'package:aves/widgets/common/basic/scaffold.dart';
import 'package:aves/widgets/common/extensions/build_context.dart';
import 'package:aves/widgets/settings/settings_definition.dart';
import 'package:aves/widgets/settings/video/video.dart';
@ -19,7 +20,7 @@ class _VideoSettingsPageState extends State<VideoSettingsPage> {
@override
Widget build(BuildContext context) {
final theme = Theme.of(context);
return Scaffold(
return AvesScaffold(
appBar: AppBar(
automaticallyImplyLeading: !settings.useTvLayout,
title: Text(context.l10n.settingsVideoPageTitle),

View file

@ -1,4 +1,5 @@
import 'package:aves/model/settings/settings.dart';
import 'package:aves/widgets/common/basic/scaffold.dart';
import 'package:aves/widgets/common/extensions/build_context.dart';
import 'package:aves/widgets/settings/common/tiles.dart';
import 'package:flutter/material.dart';
@ -13,7 +14,7 @@ class ViewerOverlayPage extends StatelessWidget {
@override
Widget build(BuildContext context) {
final useTvLayout = settings.useTvLayout;
return Scaffold(
return AvesScaffold(
appBar: AppBar(
automaticallyImplyLeading: !useTvLayout,
title: Text(context.l10n.settingsViewerOverlayPageTitle),

View file

@ -2,6 +2,7 @@ import 'package:aves/model/settings/enums/enums.dart';
import 'package:aves/model/settings/enums/slideshow_video_playback.dart';
import 'package:aves/model/settings/enums/viewer_transition.dart';
import 'package:aves/model/settings/settings.dart';
import 'package:aves/widgets/common/basic/scaffold.dart';
import 'package:aves/widgets/common/extensions/build_context.dart';
import 'package:aves/widgets/settings/common/tiles.dart';
import 'package:flutter/material.dart';
@ -14,7 +15,7 @@ class ViewerSlideshowPage extends StatelessWidget {
@override
Widget build(BuildContext context) {
final l10n = context.l10n;
return Scaffold(
return AvesScaffold(
appBar: AppBar(
automaticallyImplyLeading: !settings.useTvLayout,
title: Text(l10n.settingsViewerSlideshowPageTitle),

View file

@ -15,6 +15,7 @@ import 'package:aves/theme/icons.dart';
import 'package:aves/utils/constants.dart';
import 'package:aves/widgets/collection/collection_page.dart';
import 'package:aves/widgets/common/basic/insets.dart';
import 'package:aves/widgets/common/basic/scaffold.dart';
import 'package:aves/widgets/common/basic/tv_edge_focus.dart';
import 'package:aves/widgets/common/extensions/build_context.dart';
import 'package:aves/widgets/common/extensions/media_query.dart';
@ -219,7 +220,7 @@ class _StatsPageState extends State<StatsPage> {
}
}
return Scaffold(
return AvesScaffold(
appBar: AppBar(
automaticallyImplyLeading: !useTvLayout,
title: Text(l10n.statsPageTitle),
@ -366,7 +367,7 @@ class StatsTopPage extends StatelessWidget {
@override
Widget build(BuildContext context) {
return Scaffold(
return AvesScaffold(
appBar: AppBar(
automaticallyImplyLeading: !settings.useTvLayout,
title: Text(title),

View file

@ -1,5 +1,6 @@
import 'package:aves/model/entry.dart';
import 'package:aves/model/source/collection_lens.dart';
import 'package:aves/widgets/common/basic/scaffold.dart';
import 'package:aves/widgets/viewer/controller.dart';
import 'package:aves/widgets/viewer/entry_viewer_stack.dart';
import 'package:aves/widgets/viewer/multipage/conductor.dart';
@ -40,7 +41,7 @@ class _EntryViewerPageState extends State<EntryViewerPage> {
@override
Widget build(BuildContext context) {
return Scaffold(
return AvesScaffold(
body: ViewStateConductorProvider(
child: VideoConductorProvider(
child: MultiPageConductorProvider(

View file

@ -7,6 +7,7 @@ import 'package:aves/model/filters/filters.dart';
import 'package:aves/model/source/collection_lens.dart';
import 'package:aves/theme/durations.dart';
import 'package:aves/widgets/common/basic/insets.dart';
import 'package:aves/widgets/common/basic/scaffold.dart';
import 'package:aves/widgets/common/basic/tv_edge_focus.dart';
import 'package:aves/widgets/filter_grids/common/action_delegates/chip.dart';
import 'package:aves/widgets/viewer/action/entry_info_action_delegate.dart';
@ -85,7 +86,7 @@ class _InfoPageState extends State<InfoPage> {
@override
Widget build(BuildContext context) {
return Scaffold(
return AvesScaffold(
body: GestureAreaProtectorStack(
child: SafeArea(
bottom: false,

View file

@ -7,6 +7,7 @@ import 'package:aves/model/settings/settings.dart';
import 'package:aves/theme/icons.dart';
import 'package:aves/widgets/aves_app.dart';
import 'package:aves/widgets/common/basic/insets.dart';
import 'package:aves/widgets/common/basic/scaffold.dart';
import 'package:aves/widgets/common/extensions/build_context.dart';
import 'package:aves/widgets/common/extensions/media_query.dart';
import 'package:aves/widgets/common/identity/buttons/overlay_button.dart';
@ -60,7 +61,7 @@ class _PanoramaPageState extends State<PanoramaPage> {
_onLeave();
return SynchronousFuture(true);
},
child: Scaffold(
child: AvesScaffold(
body: Stack(
children: [
ValueListenableBuilder<SensorControl>(

View file

@ -4,6 +4,7 @@ import 'package:aves/model/settings/settings.dart';
import 'package:aves/model/source/collection_lens.dart';
import 'package:aves/model/source/collection_source.dart';
import 'package:aves/theme/icons.dart';
import 'package:aves/widgets/common/basic/scaffold.dart';
import 'package:aves/widgets/common/extensions/build_context.dart';
import 'package:aves/widgets/common/identity/empty.dart';
import 'package:aves/widgets/viewer/controller.dart';
@ -93,7 +94,7 @@ class _ScreenSaverPageState extends State<ScreenSaverPage> with WidgetsBindingOb
}
}
return Scaffold(
return AvesScaffold(
body: child,
);
}

View file

@ -7,6 +7,7 @@ import 'package:aves/model/settings/settings.dart';
import 'package:aves/model/source/collection_lens.dart';
import 'package:aves/theme/icons.dart';
import 'package:aves/widgets/collection/collection_page.dart';
import 'package:aves/widgets/common/basic/scaffold.dart';
import 'package:aves/widgets/common/extensions/build_context.dart';
import 'package:aves/widgets/common/identity/empty.dart';
import 'package:aves/widgets/viewer/controller.dart';
@ -59,7 +60,7 @@ class _SlideshowPageState extends State<SlideshowPage> {
final entries = _slideshowCollection.sortedEntries;
return ListenableProvider<ValueNotifier<AppMode>>.value(
value: ValueNotifier(AppMode.slideshow),
child: Scaffold(
child: AvesScaffold(
body: entries.isEmpty
? EmptyContent(
icon: AIcons.image,

View file

@ -1,4 +1,5 @@
import 'package:aves/widgets/common/aves_highlight.dart';
import 'package:aves/widgets/common/basic/scaffold.dart';
import 'package:aves/widgets/common/extensions/build_context.dart';
import 'package:flutter/material.dart';
import 'package:flutter_highlight/themes/darcula.dart';
@ -30,7 +31,7 @@ class _SourceViewerPageState extends State<SourceViewerPage> {
@override
Widget build(BuildContext context) {
return Scaffold(
return AvesScaffold(
appBar: AppBar(
title: Text(context.l10n.sourceViewerPageTitle),
),

View file

@ -5,6 +5,7 @@ import 'package:aves/services/common/services.dart';
import 'package:aves/theme/durations.dart';
import 'package:aves/widgets/aves_app.dart';
import 'package:aves/widgets/common/basic/insets.dart';
import 'package:aves/widgets/common/basic/scaffold.dart';
import 'package:aves/widgets/viewer/controller.dart';
import 'package:aves/widgets/viewer/entry_horizontal_pager.dart';
import 'package:aves/widgets/viewer/entry_viewer_page.dart';
@ -34,7 +35,7 @@ class WallpaperPage extends StatelessWidget {
@override
Widget build(BuildContext context) {
return Scaffold(
return AvesScaffold(
body: entry != null
? ViewStateConductorProvider(
child: VideoConductorProvider(

View file

@ -7,6 +7,7 @@ import 'package:aves/utils/constants.dart';
import 'package:aves/widgets/about/policy_page.dart';
import 'package:aves/widgets/common/basic/link_chip.dart';
import 'package:aves/widgets/common/basic/markdown_container.dart';
import 'package:aves/widgets/common/basic/scaffold.dart';
import 'package:aves/widgets/common/extensions/build_context.dart';
import 'package:aves/widgets/common/identity/aves_logo.dart';
import 'package:aves/widgets/common/identity/buttons/outlined_button.dart';
@ -49,7 +50,7 @@ class _WelcomePageState extends State<WelcomePage> {
@override
Widget build(BuildContext context) {
return Scaffold(
return AvesScaffold(
body: SafeArea(
child: Center(
child: FutureBuilder<String>(