mirror of
https://github.com/immich-app/immich
synced 2025-11-07 17:27:20 +00:00
fix: close menu anchor on navigation (#22021)
Co-authored-by: shenlong-tanwen <139912620+shalong-tanwen@users.noreply.github.com>
This commit is contained in:
parent
8d849d226d
commit
81eb5ab40d
1 changed files with 42 additions and 23 deletions
|
|
@ -40,6 +40,7 @@ class AlbumSelector extends ConsumerStatefulWidget {
|
||||||
class _AlbumSelectorState extends ConsumerState<AlbumSelector> {
|
class _AlbumSelectorState extends ConsumerState<AlbumSelector> {
|
||||||
bool isGrid = false;
|
bool isGrid = false;
|
||||||
final searchController = TextEditingController();
|
final searchController = TextEditingController();
|
||||||
|
final menuController = MenuController();
|
||||||
final searchFocusNode = FocusNode();
|
final searchFocusNode = FocusNode();
|
||||||
List<RemoteAlbum> sortedAlbums = [];
|
List<RemoteAlbum> sortedAlbums = [];
|
||||||
List<RemoteAlbum> shownAlbums = [];
|
List<RemoteAlbum> shownAlbums = [];
|
||||||
|
|
@ -157,34 +158,45 @@ class _AlbumSelectorState extends ConsumerState<AlbumSelector> {
|
||||||
await sortAlbums();
|
await sortAlbums();
|
||||||
});
|
});
|
||||||
|
|
||||||
return MultiSliver(
|
return PopScope(
|
||||||
children: [
|
onPopInvokedWithResult: (didPop, _) {
|
||||||
_SearchBar(
|
menuController.close();
|
||||||
searchController: searchController,
|
},
|
||||||
searchFocusNode: searchFocusNode,
|
child: MultiSliver(
|
||||||
onSearch: onSearch,
|
children: [
|
||||||
filterMode: filter.mode,
|
_SearchBar(
|
||||||
onClearSearch: clearSearch,
|
searchController: searchController,
|
||||||
),
|
searchFocusNode: searchFocusNode,
|
||||||
_QuickFilterButtonRow(
|
onSearch: onSearch,
|
||||||
filterMode: filter.mode,
|
filterMode: filter.mode,
|
||||||
onChangeFilter: changeFilter,
|
onClearSearch: clearSearch,
|
||||||
onSearch: onSearch,
|
),
|
||||||
searchController: searchController,
|
_QuickFilterButtonRow(
|
||||||
),
|
filterMode: filter.mode,
|
||||||
_QuickSortAndViewMode(isGrid: isGrid, onToggleViewMode: toggleViewMode, onSortChanged: changeSort),
|
onChangeFilter: changeFilter,
|
||||||
isGrid
|
onSearch: onSearch,
|
||||||
? _AlbumGrid(albums: shownAlbums, userId: userId, onAlbumSelected: widget.onAlbumSelected)
|
searchController: searchController,
|
||||||
: _AlbumList(albums: shownAlbums, userId: userId, onAlbumSelected: widget.onAlbumSelected),
|
),
|
||||||
],
|
_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 {
|
class _SortButton extends ConsumerStatefulWidget {
|
||||||
const _SortButton(this.onSortChanged);
|
const _SortButton(this.onSortChanged, {this.controller});
|
||||||
|
|
||||||
final Future<void> Function(AlbumSort) onSortChanged;
|
final Future<void> Function(AlbumSort) onSortChanged;
|
||||||
|
final MenuController? controller;
|
||||||
|
|
||||||
@override
|
@override
|
||||||
ConsumerState<_SortButton> createState() => _SortButtonState();
|
ConsumerState<_SortButton> createState() => _SortButtonState();
|
||||||
|
|
@ -220,6 +232,7 @@ class _SortButtonState extends ConsumerState<_SortButton> {
|
||||||
@override
|
@override
|
||||||
Widget build(BuildContext context) {
|
Widget build(BuildContext context) {
|
||||||
return MenuAnchor(
|
return MenuAnchor(
|
||||||
|
controller: widget.controller,
|
||||||
style: MenuStyle(
|
style: MenuStyle(
|
||||||
elevation: const WidgetStatePropertyAll(1),
|
elevation: const WidgetStatePropertyAll(1),
|
||||||
shape: WidgetStateProperty.all(
|
shape: WidgetStateProperty.all(
|
||||||
|
|
@ -449,10 +462,16 @@ class _QuickFilterButton extends StatelessWidget {
|
||||||
}
|
}
|
||||||
|
|
||||||
class _QuickSortAndViewMode 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 bool isGrid;
|
||||||
final VoidCallback onToggleViewMode;
|
final VoidCallback onToggleViewMode;
|
||||||
|
final MenuController? controller;
|
||||||
final Future<void> Function(AlbumSort) onSortChanged;
|
final Future<void> Function(AlbumSort) onSortChanged;
|
||||||
|
|
||||||
@override
|
@override
|
||||||
|
|
@ -463,7 +482,7 @@ class _QuickSortAndViewMode extends StatelessWidget {
|
||||||
child: Row(
|
child: Row(
|
||||||
mainAxisAlignment: MainAxisAlignment.spaceBetween,
|
mainAxisAlignment: MainAxisAlignment.spaceBetween,
|
||||||
children: [
|
children: [
|
||||||
_SortButton(onSortChanged),
|
_SortButton(onSortChanged, controller: controller),
|
||||||
IconButton(
|
IconButton(
|
||||||
icon: Icon(isGrid ? Icons.view_list_outlined : Icons.grid_view_outlined, size: 24),
|
icon: Icon(isGrid ? Icons.view_list_outlined : Icons.grid_view_outlined, size: 24),
|
||||||
onPressed: onToggleViewMode,
|
onPressed: onToggleViewMode,
|
||||||
|
|
|
||||||
Loading…
Add table
Add a link
Reference in a new issue