From a36bf739c789e384d7d197072e9921d3af081021 Mon Sep 17 00:00:00 2001 From: Thibault Deckers Date: Mon, 22 Mar 2021 20:00:02 +0900 Subject: [PATCH] drawer: hide favourites tile if filter is hidden --- lib/model/filters/favourite.dart | 4 +++- lib/model/filters/filters.dart | 2 +- lib/widgets/drawer/app_drawer.dart | 5 +++-- lib/widgets/search/search_delegate.dart | 2 +- lib/widgets/viewer/info/basic_section.dart | 2 +- test/model/filters_test.dart | 2 +- 6 files changed, 10 insertions(+), 7 deletions(-) diff --git a/lib/model/filters/favourite.dart b/lib/model/filters/favourite.dart index 0c27c9c72..79c65a073 100644 --- a/lib/model/filters/favourite.dart +++ b/lib/model/filters/favourite.dart @@ -8,7 +8,9 @@ import 'package:flutter/widgets.dart'; class FavouriteFilter extends CollectionFilter { static const type = 'favourite'; - const FavouriteFilter(); + static const instance = FavouriteFilter._private(); + + const FavouriteFilter._private(); @override Map toMap() => { diff --git a/lib/model/filters/filters.dart b/lib/model/filters/filters.dart index fdfbf371d..fce3a889f 100644 --- a/lib/model/filters/filters.dart +++ b/lib/model/filters/filters.dart @@ -31,7 +31,7 @@ abstract class CollectionFilter implements Comparable { case AlbumFilter.type: return AlbumFilter.fromMap(jsonMap); case FavouriteFilter.type: - return FavouriteFilter(); + return FavouriteFilter.instance; case LocationFilter.type: return LocationFilter.fromMap(jsonMap); case TypeFilter.type: diff --git a/lib/widgets/drawer/app_drawer.dart b/lib/widgets/drawer/app_drawer.dart index e4b0669a9..e3c3ff760 100644 --- a/lib/widgets/drawer/app_drawer.dart +++ b/lib/widgets/drawer/app_drawer.dart @@ -47,11 +47,12 @@ class _AppDrawerState extends State { Widget build(BuildContext context) { final hiddenFilters = settings.hiddenFilters; final showVideos = !hiddenFilters.contains(MimeFilter.video); + final showFavourites = !hiddenFilters.contains(FavouriteFilter.instance); final drawerItems = [ _buildHeader(context), allCollectionTile, if (showVideos) videoTile, - favouriteTile, + if (showFavourites) favouriteTile, _buildSpecialAlbumSection(), Divider(), albumListTile, @@ -161,7 +162,7 @@ class _AppDrawerState extends State { Widget get favouriteTile => CollectionNavTile( leading: Icon(AIcons.favourite), title: context.l10n.drawerCollectionFavourites, - filter: FavouriteFilter(), + filter: FavouriteFilter.instance, ); Widget get albumListTile => NavTile( diff --git a/lib/widgets/search/search_delegate.dart b/lib/widgets/search/search_delegate.dart index 11d9c94a6..b825cf7d8 100644 --- a/lib/widgets/search/search_delegate.dart +++ b/lib/widgets/search/search_delegate.dart @@ -30,7 +30,7 @@ class CollectionSearchDelegate { static const searchHistoryCount = 10; static final typeFilters = [ - FavouriteFilter(), + FavouriteFilter.instance, MimeFilter.image, MimeFilter.video, TypeFilter.animated, diff --git a/lib/widgets/viewer/info/basic_section.dart b/lib/widgets/viewer/info/basic_section.dart index 43453f98b..5035ec065 100644 --- a/lib/widgets/viewer/info/basic_section.dart +++ b/lib/widgets/viewer/info/basic_section.dart @@ -90,7 +90,7 @@ class BasicSection extends StatelessWidget { builder: (context, child) { final effectiveFilters = [ ...filters, - if (entry.isFavourite) FavouriteFilter(), + if (entry.isFavourite) FavouriteFilter.instance, ]..sort(); if (effectiveFilters.isEmpty) return SizedBox.shrink(); return Padding( diff --git a/test/model/filters_test.dart b/test/model/filters_test.dart index 44710ae23..e1412de03 100644 --- a/test/model/filters_test.dart +++ b/test/model/filters_test.dart @@ -15,7 +15,7 @@ void main() { final album = AlbumFilter('path/to/album', 'album'); expect(album, jsonRoundTrip(album)); - final fav = FavouriteFilter(); + final fav = FavouriteFilter.instance; expect(fav, jsonRoundTrip(fav)); final location = LocationFilter(LocationLevel.country, 'France${LocationFilter.locationSeparator}FR');