From 2236be7d607cc13c3c8fb4c706960f02ccea2b5a Mon Sep 17 00:00:00 2001 From: Thibault Deckers Date: Fri, 16 Oct 2020 17:26:47 +0900 Subject: [PATCH] albums: allow sorting when selecting album --- .../selection_action_delegate.dart | 71 +++++++++++-------- 1 file changed, 43 insertions(+), 28 deletions(-) diff --git a/lib/widgets/common/action_delegates/selection_action_delegate.dart b/lib/widgets/common/action_delegates/selection_action_delegate.dart index 6c1dda456..26ef150a1 100644 --- a/lib/widgets/common/action_delegates/selection_action_delegate.dart +++ b/lib/widgets/common/action_delegates/selection_action_delegate.dart @@ -1,8 +1,10 @@ import 'dart:async'; import 'package:aves/model/filters/album.dart'; +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/services/android_app_service.dart'; import 'package:aves/services/image_file_service.dart'; import 'package:aves/widgets/collection/collection_actions.dart'; @@ -14,11 +16,14 @@ import 'package:aves/widgets/common/aves_dialog.dart'; import 'package:aves/widgets/common/entry_actions.dart'; import 'package:aves/widgets/common/icons.dart'; import 'package:aves/widgets/filter_grids/albums_page.dart'; +import 'package:aves/widgets/filter_grids/common/chip_actions.dart'; +import 'package:aves/widgets/filter_grids/common/chip_set_action_delegate.dart'; import 'package:aves/widgets/filter_grids/common/filter_grid_page.dart'; import 'package:flutter/foundation.dart'; import 'package:flutter/material.dart'; import 'package:flutter/widgets.dart'; import 'package:intl/intl.dart'; +import 'package:provider/provider.dart'; class SelectionActionDelegate with FeedbackMixin, PermissionAwareMixin { final CollectionLens collection; @@ -58,39 +63,49 @@ class SelectionActionDelegate with FeedbackMixin, PermissionAwareMixin { Future _moveSelection(BuildContext context, {@required bool copy}) async { final source = collection.source; + final chipSetActionDelegate = AlbumChipSetActionDelegate(source: source); final destinationAlbum = await Navigator.push( context, MaterialPageRoute( builder: (context) { - return FilterGridPage( - source: source, - appBar: SliverAppBar( - leading: BackButton(), - title: Text(copy ? 'Copy to Album' : 'Move to Album'), - actions: [ - IconButton( - icon: Icon(AIcons.createAlbum), - onPressed: () async { - final newAlbum = await showDialog( - context: context, - builder: (context) => CreateAlbumDialog(), - ); - if (newAlbum != null && newAlbum.isNotEmpty) { - Navigator.pop(context, newAlbum); - } - }, - tooltip: 'Create album', + return Selector( + selector: (context, s) => s.albumSortFactor, + builder: (context, sortFactor, child) { + return FilterGridPage( + source: source, + appBar: SliverAppBar( + leading: BackButton(), + title: Text(copy ? 'Copy to Album' : 'Move to Album'), + actions: [ + IconButton( + icon: Icon(AIcons.createAlbum), + onPressed: () async { + final newAlbum = await showDialog( + context: context, + builder: (context) => CreateAlbumDialog(), + ); + if (newAlbum != null && newAlbum.isNotEmpty) { + Navigator.pop(context, newAlbum); + } + }, + tooltip: 'Create album', + ), + IconButton( + icon: Icon(AIcons.sort), + onPressed: () => chipSetActionDelegate.onActionSelected(context, ChipSetAction.sort), + ), + ], + floating: true, ), - ], - floating: true, - ), - filterEntries: AlbumListPage.getAlbumEntries(source), - filterBuilder: (s) => AlbumFilter(s, source.getUniqueAlbumName(s)), - emptyBuilder: () => EmptyContent( - icon: AIcons.album, - text: 'No albums', - ), - onTap: (filter) => Navigator.pop(context, (filter as AlbumFilter)?.album), + filterEntries: AlbumListPage.getAlbumEntries(source), + filterBuilder: (s) => AlbumFilter(s, source.getUniqueAlbumName(s)), + emptyBuilder: () => EmptyContent( + icon: AIcons.album, + text: 'No albums', + ), + onTap: (filter) => Navigator.pop(context, (filter as AlbumFilter)?.album), + ); + }, ); }, ),