drawer: hide favourites tile if filter is hidden

This commit is contained in:
Thibault Deckers 2021-03-22 20:00:02 +09:00
parent 2a4722736b
commit a36bf739c7
6 changed files with 10 additions and 7 deletions

View file

@ -8,7 +8,9 @@ import 'package:flutter/widgets.dart';
class FavouriteFilter extends CollectionFilter { class FavouriteFilter extends CollectionFilter {
static const type = 'favourite'; static const type = 'favourite';
const FavouriteFilter(); static const instance = FavouriteFilter._private();
const FavouriteFilter._private();
@override @override
Map<String, dynamic> toMap() => { Map<String, dynamic> toMap() => {

View file

@ -31,7 +31,7 @@ abstract class CollectionFilter implements Comparable<CollectionFilter> {
case AlbumFilter.type: case AlbumFilter.type:
return AlbumFilter.fromMap(jsonMap); return AlbumFilter.fromMap(jsonMap);
case FavouriteFilter.type: case FavouriteFilter.type:
return FavouriteFilter(); return FavouriteFilter.instance;
case LocationFilter.type: case LocationFilter.type:
return LocationFilter.fromMap(jsonMap); return LocationFilter.fromMap(jsonMap);
case TypeFilter.type: case TypeFilter.type:

View file

@ -47,11 +47,12 @@ class _AppDrawerState extends State<AppDrawer> {
Widget build(BuildContext context) { Widget build(BuildContext context) {
final hiddenFilters = settings.hiddenFilters; final hiddenFilters = settings.hiddenFilters;
final showVideos = !hiddenFilters.contains(MimeFilter.video); final showVideos = !hiddenFilters.contains(MimeFilter.video);
final showFavourites = !hiddenFilters.contains(FavouriteFilter.instance);
final drawerItems = <Widget>[ final drawerItems = <Widget>[
_buildHeader(context), _buildHeader(context),
allCollectionTile, allCollectionTile,
if (showVideos) videoTile, if (showVideos) videoTile,
favouriteTile, if (showFavourites) favouriteTile,
_buildSpecialAlbumSection(), _buildSpecialAlbumSection(),
Divider(), Divider(),
albumListTile, albumListTile,
@ -161,7 +162,7 @@ class _AppDrawerState extends State<AppDrawer> {
Widget get favouriteTile => CollectionNavTile( Widget get favouriteTile => CollectionNavTile(
leading: Icon(AIcons.favourite), leading: Icon(AIcons.favourite),
title: context.l10n.drawerCollectionFavourites, title: context.l10n.drawerCollectionFavourites,
filter: FavouriteFilter(), filter: FavouriteFilter.instance,
); );
Widget get albumListTile => NavTile( Widget get albumListTile => NavTile(

View file

@ -30,7 +30,7 @@ class CollectionSearchDelegate {
static const searchHistoryCount = 10; static const searchHistoryCount = 10;
static final typeFilters = [ static final typeFilters = [
FavouriteFilter(), FavouriteFilter.instance,
MimeFilter.image, MimeFilter.image,
MimeFilter.video, MimeFilter.video,
TypeFilter.animated, TypeFilter.animated,

View file

@ -90,7 +90,7 @@ class BasicSection extends StatelessWidget {
builder: (context, child) { builder: (context, child) {
final effectiveFilters = [ final effectiveFilters = [
...filters, ...filters,
if (entry.isFavourite) FavouriteFilter(), if (entry.isFavourite) FavouriteFilter.instance,
]..sort(); ]..sort();
if (effectiveFilters.isEmpty) return SizedBox.shrink(); if (effectiveFilters.isEmpty) return SizedBox.shrink();
return Padding( return Padding(

View file

@ -15,7 +15,7 @@ void main() {
final album = AlbumFilter('path/to/album', 'album'); final album = AlbumFilter('path/to/album', 'album');
expect(album, jsonRoundTrip(album)); expect(album, jsonRoundTrip(album));
final fav = FavouriteFilter(); final fav = FavouriteFilter.instance;
expect(fav, jsonRoundTrip(fav)); expect(fav, jsonRoundTrip(fav));
final location = LocationFilter(LocationLevel.country, 'France${LocationFilter.locationSeparator}FR'); final location = LocationFilter(LocationLevel.country, 'France${LocationFilter.locationSeparator}FR');