#1292 remember title filter visibility by page
This commit is contained in:
parent
a3024fdf4e
commit
1a78fdfd0b
11 changed files with 29 additions and 21 deletions
|
@ -8,6 +8,10 @@ All notable changes to this project will be documented in this file.
|
||||||
|
|
||||||
- integrate with OS app language settings on Android >=14
|
- integrate with OS app language settings on Android >=14
|
||||||
|
|
||||||
|
### Changed
|
||||||
|
|
||||||
|
- remember title filter visibility by page
|
||||||
|
|
||||||
## <a id="v1.11.18"></a>[v1.11.18] - 2024-11-18
|
## <a id="v1.11.18"></a>[v1.11.18] - 2024-11-18
|
||||||
|
|
||||||
### Changed
|
### Changed
|
||||||
|
|
|
@ -51,7 +51,7 @@ mixin FilterGridsSettings on SettingsAccess {
|
||||||
|
|
||||||
set pinnedFilters(Set<CollectionFilter> newValue) => set(SettingKeys.pinnedFiltersKey, newValue.map((filter) => filter.toJson()).toList());
|
set pinnedFilters(Set<CollectionFilter> newValue) => set(SettingKeys.pinnedFiltersKey, newValue.map((filter) => filter.toJson()).toList());
|
||||||
|
|
||||||
bool get showAlbumPickQuery => getBool(SettingKeys.showAlbumPickQueryKey) ?? false;
|
bool getShowTitleQuery(String routeName) => getBool(SettingKeys.showTitleQueryPrefixKey + routeName) ?? false;
|
||||||
|
|
||||||
set showAlbumPickQuery(bool newValue) => set(SettingKeys.showAlbumPickQueryKey, newValue);
|
void setShowTitleQuery(String routeName, bool newValue) => set(SettingKeys.showTitleQueryPrefixKey + routeName, newValue);
|
||||||
}
|
}
|
||||||
|
|
|
@ -360,6 +360,12 @@ class Settings with ChangeNotifier, SettingsAccess, AppSettings, DisplaySettings
|
||||||
} else {
|
} else {
|
||||||
debugPrint('failed to import key=$key, value=$newValue is not a string');
|
debugPrint('failed to import key=$key, value=$newValue is not a string');
|
||||||
}
|
}
|
||||||
|
} else if (key.startsWith(SettingKeys.showTitleQueryPrefixKey)) {
|
||||||
|
if (newValue is bool) {
|
||||||
|
store.setBool(key, newValue);
|
||||||
|
} else {
|
||||||
|
debugPrint('failed to import key=$key, value=$newValue is not a bool');
|
||||||
|
}
|
||||||
} else {
|
} else {
|
||||||
switch (key) {
|
switch (key) {
|
||||||
case SettingKeys.subtitleTextColorKey:
|
case SettingKeys.subtitleTextColorKey:
|
||||||
|
@ -404,7 +410,6 @@ class Settings with ChangeNotifier, SettingsAccess, AppSettings, DisplaySettings
|
||||||
case SettingKeys.stateSortReverseKey:
|
case SettingKeys.stateSortReverseKey:
|
||||||
case SettingKeys.placeSortReverseKey:
|
case SettingKeys.placeSortReverseKey:
|
||||||
case SettingKeys.tagSortReverseKey:
|
case SettingKeys.tagSortReverseKey:
|
||||||
case SettingKeys.showAlbumPickQueryKey:
|
|
||||||
case SettingKeys.showOverlayOnOpeningKey:
|
case SettingKeys.showOverlayOnOpeningKey:
|
||||||
case SettingKeys.showOverlayMinimapKey:
|
case SettingKeys.showOverlayMinimapKey:
|
||||||
case SettingKeys.showOverlayInfoKey:
|
case SettingKeys.showOverlayInfoKey:
|
||||||
|
|
|
@ -91,6 +91,7 @@ class _CollectionPageState extends State<CollectionPage> {
|
||||||
selector: (context, selection) => selection.selectedItems.isNotEmpty,
|
selector: (context, selection) => selection.selectedItems.isNotEmpty,
|
||||||
builder: (context, hasSelection, child) {
|
builder: (context, hasSelection, child) {
|
||||||
final body = QueryProvider(
|
final body = QueryProvider(
|
||||||
|
startEnabled: settings.getShowTitleQuery(context.currentRouteName!),
|
||||||
initialQuery: liveFilter?.query,
|
initialQuery: liveFilter?.query,
|
||||||
child: Builder(
|
child: Builder(
|
||||||
builder: (context) {
|
builder: (context) {
|
||||||
|
|
|
@ -181,6 +181,8 @@ class EntrySetActionDelegate with FeedbackMixin, PermissionAwareMixin, SizeAware
|
||||||
case EntrySetAction.searchCollection:
|
case EntrySetAction.searchCollection:
|
||||||
_goToSearch(context);
|
_goToSearch(context);
|
||||||
case EntrySetAction.toggleTitleSearch:
|
case EntrySetAction.toggleTitleSearch:
|
||||||
|
final routeName = context.currentRouteName!;
|
||||||
|
settings.setShowTitleQuery(routeName, !settings.getShowTitleQuery(routeName));
|
||||||
context.read<Query>().toggle();
|
context.read<Query>().toggle();
|
||||||
case EntrySetAction.addShortcut:
|
case EntrySetAction.addShortcut:
|
||||||
_addShortcut(context);
|
_addShortcut(context);
|
||||||
|
|
|
@ -3,13 +3,13 @@ import 'package:flutter/widgets.dart';
|
||||||
import 'package:provider/provider.dart';
|
import 'package:provider/provider.dart';
|
||||||
|
|
||||||
class QueryProvider extends StatelessWidget {
|
class QueryProvider extends StatelessWidget {
|
||||||
final bool enabled;
|
final bool startEnabled;
|
||||||
final String? initialQuery;
|
final String? initialQuery;
|
||||||
final Widget child;
|
final Widget child;
|
||||||
|
|
||||||
const QueryProvider({
|
const QueryProvider({
|
||||||
super.key,
|
super.key,
|
||||||
this.enabled = false,
|
this.startEnabled = false,
|
||||||
this.initialQuery,
|
this.initialQuery,
|
||||||
required this.child,
|
required this.child,
|
||||||
});
|
});
|
||||||
|
@ -18,7 +18,7 @@ class QueryProvider extends StatelessWidget {
|
||||||
Widget build(BuildContext context) {
|
Widget build(BuildContext context) {
|
||||||
return ChangeNotifierProvider<Query>(
|
return ChangeNotifierProvider<Query>(
|
||||||
create: (context) => Query(
|
create: (context) => Query(
|
||||||
enabled: enabled,
|
enabled: startEnabled,
|
||||||
initialValue: initialQuery,
|
initialValue: initialQuery,
|
||||||
),
|
),
|
||||||
child: child,
|
child: child,
|
||||||
|
|
|
@ -114,13 +114,13 @@ class _AlbumPickPageState extends State<_AlbumPickPage> {
|
||||||
final gridItems = AlbumListPage.getAlbumGridItems(context, source);
|
final gridItems = AlbumListPage.getAlbumGridItems(context, source);
|
||||||
return SelectionProvider<FilterGridItem<AlbumFilter>>(
|
return SelectionProvider<FilterGridItem<AlbumFilter>>(
|
||||||
child: QueryProvider(
|
child: QueryProvider(
|
||||||
enabled: settings.showAlbumPickQuery,
|
startEnabled: settings.getShowTitleQuery(context.currentRouteName!),
|
||||||
child: FilterGridPage<AlbumFilter>(
|
child: FilterGridPage<AlbumFilter>(
|
||||||
settingsRouteKey: AlbumListPage.routeName,
|
settingsRouteKey: AlbumListPage.routeName,
|
||||||
appBar: FilterGridAppBar(
|
appBar: FilterGridAppBar(
|
||||||
source: source,
|
source: source,
|
||||||
title: title,
|
title: title,
|
||||||
actionDelegate: _AlbumChipSetPickActionDelegate(gridItems),
|
actionDelegate: AlbumChipSetActionDelegate(gridItems),
|
||||||
actionsBuilder: _buildActions,
|
actionsBuilder: _buildActions,
|
||||||
isEmpty: false,
|
isEmpty: false,
|
||||||
appBarHeightNotifier: _appBarHeightNotifier,
|
appBarHeightNotifier: _appBarHeightNotifier,
|
||||||
|
@ -287,15 +287,3 @@ class _AlbumPickPageState extends State<_AlbumPickPage> {
|
||||||
Navigator.maybeOf(context)?.pop<AlbumFilter>(filter);
|
Navigator.maybeOf(context)?.pop<AlbumFilter>(filter);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
class _AlbumChipSetPickActionDelegate extends AlbumChipSetActionDelegate {
|
|
||||||
_AlbumChipSetPickActionDelegate(super.items);
|
|
||||||
|
|
||||||
@override
|
|
||||||
void onActionSelected(BuildContext context, ChipSetAction action) {
|
|
||||||
if (action == ChipSetAction.toggleTitleSearch) {
|
|
||||||
settings.showAlbumPickQuery = !settings.showAlbumPickQuery;
|
|
||||||
}
|
|
||||||
super.onActionSelected(context, action);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
|
@ -1,11 +1,13 @@
|
||||||
import 'package:aves/app_mode.dart';
|
import 'package:aves/app_mode.dart';
|
||||||
import 'package:aves/model/entry/entry.dart';
|
import 'package:aves/model/entry/entry.dart';
|
||||||
import 'package:aves/model/filters/query.dart';
|
import 'package:aves/model/filters/query.dart';
|
||||||
|
import 'package:aves/model/settings/settings.dart';
|
||||||
import 'package:aves/model/source/collection_lens.dart';
|
import 'package:aves/model/source/collection_lens.dart';
|
||||||
import 'package:aves/widgets/collection/collection_grid.dart';
|
import 'package:aves/widgets/collection/collection_grid.dart';
|
||||||
import 'package:aves/widgets/collection/collection_page.dart';
|
import 'package:aves/widgets/collection/collection_page.dart';
|
||||||
import 'package:aves/widgets/common/basic/insets.dart';
|
import 'package:aves/widgets/common/basic/insets.dart';
|
||||||
import 'package:aves/widgets/common/basic/scaffold.dart';
|
import 'package:aves/widgets/common/basic/scaffold.dart';
|
||||||
|
import 'package:aves/widgets/common/extensions/build_context.dart';
|
||||||
import 'package:aves/widgets/common/providers/query_provider.dart';
|
import 'package:aves/widgets/common/providers/query_provider.dart';
|
||||||
import 'package:aves/widgets/common/providers/selection_provider.dart';
|
import 'package:aves/widgets/common/providers/selection_provider.dart';
|
||||||
import 'package:collection/collection.dart';
|
import 'package:collection/collection.dart';
|
||||||
|
@ -49,6 +51,7 @@ class _ItemPickPageState extends State<ItemPickPage> {
|
||||||
child: AvesScaffold(
|
child: AvesScaffold(
|
||||||
body: SelectionProvider<AvesEntry>(
|
body: SelectionProvider<AvesEntry>(
|
||||||
child: QueryProvider(
|
child: QueryProvider(
|
||||||
|
startEnabled: settings.getShowTitleQuery(context.currentRouteName!),
|
||||||
initialQuery: liveFilter?.query,
|
initialQuery: liveFilter?.query,
|
||||||
child: GestureAreaProtectorStack(
|
child: GestureAreaProtectorStack(
|
||||||
child: SafeArea(
|
child: SafeArea(
|
||||||
|
|
|
@ -179,6 +179,8 @@ abstract class ChipSetActionDelegate<T extends CollectionFilter> with FeedbackMi
|
||||||
case ChipSetAction.search:
|
case ChipSetAction.search:
|
||||||
_goToSearch(context);
|
_goToSearch(context);
|
||||||
case ChipSetAction.toggleTitleSearch:
|
case ChipSetAction.toggleTitleSearch:
|
||||||
|
final routeName = context.currentRouteName!;
|
||||||
|
settings.setShowTitleQuery(routeName, !settings.getShowTitleQuery(routeName));
|
||||||
context.read<Query>().toggle();
|
context.read<Query>().toggle();
|
||||||
case ChipSetAction.createAlbum:
|
case ChipSetAction.createAlbum:
|
||||||
case ChipSetAction.createVault:
|
case ChipSetAction.createVault:
|
||||||
|
|
|
@ -1,6 +1,8 @@
|
||||||
import 'package:aves/model/filters/filters.dart';
|
import 'package:aves/model/filters/filters.dart';
|
||||||
|
import 'package:aves/model/settings/settings.dart';
|
||||||
import 'package:aves/model/source/collection_source.dart';
|
import 'package:aves/model/source/collection_source.dart';
|
||||||
import 'package:aves/utils/time_utils.dart';
|
import 'package:aves/utils/time_utils.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/aves_filter_chip.dart';
|
||||||
import 'package:aves/widgets/common/providers/query_provider.dart';
|
import 'package:aves/widgets/common/providers/query_provider.dart';
|
||||||
import 'package:aves/widgets/common/providers/selection_provider.dart';
|
import 'package:aves/widgets/common/providers/selection_provider.dart';
|
||||||
|
@ -110,6 +112,7 @@ class _FilterNavigationPageState<T extends CollectionFilter, CSAD extends ChipSe
|
||||||
return SelectionProvider<FilterGridItem<T>>(
|
return SelectionProvider<FilterGridItem<T>>(
|
||||||
child: Builder(
|
child: Builder(
|
||||||
builder: (context) => QueryProvider(
|
builder: (context) => QueryProvider(
|
||||||
|
startEnabled: settings.getShowTitleQuery(context.currentRouteName!),
|
||||||
child: FilterGridPage<T>(
|
child: FilterGridPage<T>(
|
||||||
appBar: FilterGridAppBar<T, CSAD>(
|
appBar: FilterGridAppBar<T, CSAD>(
|
||||||
source: widget.source,
|
source: widget.source,
|
||||||
|
|
|
@ -86,7 +86,7 @@ class SettingKeys {
|
||||||
static const pinnedFiltersKey = 'pinned_filters';
|
static const pinnedFiltersKey = 'pinned_filters';
|
||||||
static const hiddenFiltersKey = 'hidden_filters';
|
static const hiddenFiltersKey = 'hidden_filters';
|
||||||
static const deactivatedHiddenFiltersKey = 'deactivated_hidden_filters';
|
static const deactivatedHiddenFiltersKey = 'deactivated_hidden_filters';
|
||||||
static const showAlbumPickQueryKey = 'show_album_pick_query';
|
static const showTitleQueryPrefixKey = 'show_title_query_';
|
||||||
|
|
||||||
// viewer
|
// viewer
|
||||||
static const viewerQuickActionsKey = 'viewer_quick_actions';
|
static const viewerQuickActionsKey = 'viewer_quick_actions';
|
||||||
|
|
Loading…
Reference in a new issue