prevent conflict between drawer drag gesture and Android navigation gestures
This commit is contained in:
parent
584e5cae6c
commit
8ce8eb8c71
41 changed files with 128 additions and 45 deletions
|
@ -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,
|
||||
),
|
||||
|
|
|
@ -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),
|
||||
|
|
|
@ -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>>(
|
||||
|
|
|
@ -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,
|
||||
|
|
43
lib/widgets/common/basic/scaffold.dart
Normal file
43
lib/widgets/common/basic/scaffold.dart
Normal 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,
|
||||
);
|
||||
}
|
||||
}
|
|
@ -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,
|
||||
|
|
|
@ -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: [
|
||||
|
|
|
@ -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),
|
||||
),
|
||||
|
|
|
@ -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: [
|
||||
|
|
|
@ -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),
|
||||
|
|
|
@ -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,
|
||||
|
|
|
@ -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,
|
||||
|
|
|
@ -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
|
||||
|
|
|
@ -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();
|
||||
|
|
|
@ -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,
|
||||
|
|
|
@ -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),
|
||||
),
|
||||
|
|
|
@ -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),
|
||||
),
|
||||
|
|
|
@ -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),
|
||||
|
|
|
@ -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),
|
||||
),
|
||||
|
|
|
@ -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),
|
||||
|
|
|
@ -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),
|
||||
),
|
||||
|
|
|
@ -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: [
|
||||
|
|
|
@ -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),
|
||||
|
|
|
@ -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),
|
||||
),
|
||||
|
|
|
@ -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),
|
||||
|
|
|
@ -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(
|
||||
|
|
|
@ -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),
|
||||
|
|
|
@ -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),
|
||||
),
|
||||
|
|
|
@ -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),
|
||||
|
|
|
@ -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),
|
||||
|
|
|
@ -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),
|
||||
|
|
|
@ -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),
|
||||
|
|
|
@ -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),
|
||||
|
|
|
@ -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(
|
||||
|
|
|
@ -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,
|
||||
|
|
|
@ -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>(
|
||||
|
|
|
@ -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,
|
||||
);
|
||||
}
|
||||
|
|
|
@ -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,
|
||||
|
|
|
@ -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),
|
||||
),
|
||||
|
|
|
@ -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(
|
||||
|
|
|
@ -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>(
|
||||
|
|
Loading…
Reference in a new issue