albums/countries/tags: added refresh, stats actions

This commit is contained in:
Thibault Deckers 2020-09-29 18:33:03 +09:00
parent 557a65dbdd
commit bdd18d9e71
6 changed files with 69 additions and 3 deletions

View file

@ -36,7 +36,7 @@ class AlbumListPage extends StatelessWidget {
builder: (context, snapshot) => FilterNavigationPage(
source: source,
title: 'Albums',
chipSetActionDelegate: AlbumChipSetActionDelegate(),
chipSetActionDelegate: AlbumChipSetActionDelegate(source: source),
chipActionDelegate: AlbumChipActionDelegate(source: source),
chipActionsBuilder: (filter) => [
settings.pinnedFilters.contains(filter) ? ChipAction.unpin : ChipAction.pin,

View file

@ -3,6 +3,8 @@ import 'package:flutter/widgets.dart';
enum ChipSetAction {
sort,
refresh,
stats,
}
enum ChipAction {

View file

@ -1,12 +1,19 @@
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/model/source/enums.dart';
import 'package:aves/utils/durations.dart';
import 'package:aves/widgets/common/aves_selection_dialog.dart';
import 'package:aves/widgets/common/data_providers/media_store_collection_provider.dart';
import 'package:aves/widgets/filter_grids/common/chip_actions.dart';
import 'package:aves/widgets/stats/stats.dart';
import 'package:flutter/material.dart';
import 'package:flutter/scheduler.dart';
import 'package:pedantic/pedantic.dart';
abstract class ChipSetActionDelegate {
CollectionSource get source;
ChipSortFactor get sortFactor;
set sortFactor(ChipSortFactor factor);
@ -19,6 +26,15 @@ abstract class ChipSetActionDelegate {
case ChipSetAction.sort:
await _showSortDialog(context);
break;
case ChipSetAction.refresh:
if (source is MediaStoreSource) {
source.clearEntries();
unawaited((source as MediaStoreSource).refresh());
}
break;
case ChipSetAction.stats:
_goToStats(context);
break;
}
}
@ -38,9 +54,32 @@ abstract class ChipSetActionDelegate {
sortFactor = factor;
}
}
void _goToStats(BuildContext context) {
Navigator.push(
context,
MaterialPageRoute(
settings: RouteSettings(name: StatsPage.routeName),
builder: (context) => StatsPage(
collection: CollectionLens(
source: source,
groupFactor: settings.collectionGroupFactor,
sortFactor: settings.collectionSortFactor,
),
),
),
);
}
}
class AlbumChipSetActionDelegate extends ChipSetActionDelegate {
@override
final CollectionSource source;
AlbumChipSetActionDelegate({
@required this.source,
});
@override
ChipSortFactor get sortFactor => settings.albumSortFactor;
@ -49,6 +88,13 @@ class AlbumChipSetActionDelegate extends ChipSetActionDelegate {
}
class CountryChipSetActionDelegate extends ChipSetActionDelegate {
@override
final CollectionSource source;
CountryChipSetActionDelegate({
@required this.source,
});
@override
ChipSortFactor get sortFactor => settings.countrySortFactor;
@ -57,6 +103,13 @@ class CountryChipSetActionDelegate extends ChipSetActionDelegate {
}
class TagChipSetActionDelegate extends ChipSetActionDelegate {
@override
final CollectionSource source;
TagChipSetActionDelegate({
@required this.source,
});
@override
ChipSortFactor get sortFactor => settings.tagSortFactor;

View file

@ -1,5 +1,6 @@
import 'dart:ui';
import 'package:aves/main.dart';
import 'package:aves/model/filters/filters.dart';
import 'package:aves/model/image_entry.dart';
import 'package:aves/model/settings/settings.dart';
@ -24,6 +25,7 @@ import 'package:aves/widgets/filter_grids/common/chip_set_action_delegate.dart';
import 'package:aves/widgets/filter_grids/common/decorated_filter_chip.dart';
import 'package:collection/collection.dart';
import 'package:draggable_scrollbar/draggable_scrollbar.dart';
import 'package:flutter/foundation.dart';
import 'package:flutter/material.dart';
import 'package:flutter_staggered_animations/flutter_staggered_animations.dart';
import 'package:pedantic/pedantic.dart';
@ -121,6 +123,15 @@ class FilterNavigationPage extends StatelessWidget {
value: ChipSetAction.sort,
child: MenuRow(text: 'Sort…', icon: AIcons.sort),
),
if (kDebugMode)
PopupMenuItem(
value: ChipSetAction.refresh,
child: MenuRow(text: 'Refresh', icon: AIcons.refresh),
),
PopupMenuItem(
value: ChipSetAction.stats,
child: MenuRow(text: 'Stats', icon: AIcons.stats),
),
];
},
onSelected: (action) => chipSetActionDelegate.onActionSelected(context, action),

View file

@ -33,7 +33,7 @@ class CountryListPage extends StatelessWidget {
builder: (context, snapshot) => FilterNavigationPage(
source: source,
title: 'Countries',
chipSetActionDelegate: CountryChipSetActionDelegate(),
chipSetActionDelegate: CountryChipSetActionDelegate(source: source),
chipActionDelegate: ChipActionDelegate(),
chipActionsBuilder: (filter) => [
settings.pinnedFilters.contains(filter) ? ChipAction.unpin : ChipAction.pin,

View file

@ -33,7 +33,7 @@ class TagListPage extends StatelessWidget {
builder: (context, snapshot) => FilterNavigationPage(
source: source,
title: 'Tags',
chipSetActionDelegate: TagChipSetActionDelegate(),
chipSetActionDelegate: TagChipSetActionDelegate(source: source),
chipActionDelegate: ChipActionDelegate(),
chipActionsBuilder: (filter) => [
settings.pinnedFilters.contains(filter) ? ChipAction.unpin : ChipAction.pin,