diff --git a/mobile/lib/presentation/widgets/album/album_selector.widget.dart b/mobile/lib/presentation/widgets/album/album_selector.widget.dart index ce98728089..bd36db9eeb 100644 --- a/mobile/lib/presentation/widgets/album/album_selector.widget.dart +++ b/mobile/lib/presentation/widgets/album/album_selector.widget.dart @@ -40,6 +40,7 @@ class AlbumSelector extends ConsumerStatefulWidget { class _AlbumSelectorState extends ConsumerState { bool isGrid = false; final searchController = TextEditingController(); + final menuController = MenuController(); final searchFocusNode = FocusNode(); List sortedAlbums = []; List shownAlbums = []; @@ -157,34 +158,45 @@ class _AlbumSelectorState extends ConsumerState { await sortAlbums(); }); - return MultiSliver( - children: [ - _SearchBar( - searchController: searchController, - searchFocusNode: searchFocusNode, - onSearch: onSearch, - filterMode: filter.mode, - onClearSearch: clearSearch, - ), - _QuickFilterButtonRow( - filterMode: filter.mode, - onChangeFilter: changeFilter, - onSearch: onSearch, - searchController: searchController, - ), - _QuickSortAndViewMode(isGrid: isGrid, onToggleViewMode: toggleViewMode, onSortChanged: changeSort), - isGrid - ? _AlbumGrid(albums: shownAlbums, userId: userId, onAlbumSelected: widget.onAlbumSelected) - : _AlbumList(albums: shownAlbums, userId: userId, onAlbumSelected: widget.onAlbumSelected), - ], + return PopScope( + onPopInvokedWithResult: (didPop, _) { + menuController.close(); + }, + child: MultiSliver( + children: [ + _SearchBar( + searchController: searchController, + searchFocusNode: searchFocusNode, + onSearch: onSearch, + filterMode: filter.mode, + onClearSearch: clearSearch, + ), + _QuickFilterButtonRow( + filterMode: filter.mode, + onChangeFilter: changeFilter, + onSearch: onSearch, + searchController: searchController, + ), + _QuickSortAndViewMode( + isGrid: isGrid, + onToggleViewMode: toggleViewMode, + onSortChanged: changeSort, + controller: menuController, + ), + isGrid + ? _AlbumGrid(albums: shownAlbums, userId: userId, onAlbumSelected: widget.onAlbumSelected) + : _AlbumList(albums: shownAlbums, userId: userId, onAlbumSelected: widget.onAlbumSelected), + ], + ), ); } } class _SortButton extends ConsumerStatefulWidget { - const _SortButton(this.onSortChanged); + const _SortButton(this.onSortChanged, {this.controller}); final Future Function(AlbumSort) onSortChanged; + final MenuController? controller; @override ConsumerState<_SortButton> createState() => _SortButtonState(); @@ -220,6 +232,7 @@ class _SortButtonState extends ConsumerState<_SortButton> { @override Widget build(BuildContext context) { return MenuAnchor( + controller: widget.controller, style: MenuStyle( elevation: const WidgetStatePropertyAll(1), shape: WidgetStateProperty.all( @@ -449,10 +462,16 @@ class _QuickFilterButton extends StatelessWidget { } class _QuickSortAndViewMode extends StatelessWidget { - const _QuickSortAndViewMode({required this.isGrid, required this.onToggleViewMode, required this.onSortChanged}); + const _QuickSortAndViewMode({ + required this.isGrid, + required this.onToggleViewMode, + required this.onSortChanged, + this.controller, + }); final bool isGrid; final VoidCallback onToggleViewMode; + final MenuController? controller; final Future Function(AlbumSort) onSortChanged; @override @@ -463,7 +482,7 @@ class _QuickSortAndViewMode extends StatelessWidget { child: Row( mainAxisAlignment: MainAxisAlignment.spaceBetween, children: [ - _SortButton(onSortChanged), + _SortButton(onSortChanged, controller: controller), IconButton( icon: Icon(isGrid ? Icons.view_list_outlined : Icons.grid_view_outlined, size: 24), onPressed: onToggleViewMode,