Sort album widget settings screen's albums, showing selected ones on top. Note that sorting doesn't happen when selection is modified on the screen and only once when it's built

This commit is contained in:
ashilkn
2025-05-27 14:38:08 +05:30
parent 9dcd9d63b2
commit e9ceb705f6

View File

@@ -24,21 +24,14 @@ class AlbumsWidgetSettings extends StatefulWidget {
class _AlbumsWidgetSettingsState extends State<AlbumsWidgetSettings> {
final _selectedAlbums = SelectedAlbums();
bool hasInstalledAny = false;
Set<Collection> _albums = {};
@override
void initState() {
super.initState();
_selectedAlbums.addListener(_selectedAlbumsListener);
checkIfAnyWidgetInstalled();
selectExisting();
}
void _selectedAlbumsListener() {
_albums = _selectedAlbums.albums;
setState(() {});
}
Future<void> checkIfAnyWidgetInstalled() async {
final count = await AlbumHomeWidgetService.instance.countHomeWidgets();
setState(() {
@@ -76,12 +69,6 @@ class _AlbumsWidgetSettingsState extends State<AlbumsWidgetSettings> {
_selectedAlbums.select(albums);
}
@override
void dispose() {
_selectedAlbums.removeListener(_selectedAlbumsListener);
super.dispose();
}
@override
Widget build(BuildContext context) {
return Scaffold(
@@ -93,22 +80,29 @@ class _AlbumsWidgetSettingsState extends State<AlbumsWidgetSettings> {
16,
8 + MediaQuery.viewPaddingOf(context).bottom,
),
child: ButtonWidget(
buttonType: ButtonType.primary,
buttonSize: ButtonSize.large,
labelText: S.of(context).save,
shouldSurfaceExecutionStates: false,
onTap: _albums.isNotEmpty
? () async {
final albums =
_albums.map((e) => e.id.toString()).toList();
await AlbumHomeWidgetService.instance
.setSelectedAlbums(albums);
Navigator.pop(context);
await AlbumHomeWidgetService.instance.albumsChanged();
}
: null,
isDisabled: _albums.isEmpty,
child: ListenableBuilder(
listenable: _selectedAlbums,
builder: (context, _) {
return ButtonWidget(
buttonType: ButtonType.primary,
buttonSize: ButtonSize.large,
labelText: S.of(context).save,
shouldSurfaceExecutionStates: false,
onTap: _selectedAlbums.albums.isNotEmpty
? () async {
final albums = _selectedAlbums.albums
.map((e) => e.id.toString())
.toList();
await AlbumHomeWidgetService.instance
.setSelectedAlbums(albums);
Navigator.pop(context);
await AlbumHomeWidgetService.instance
.albumsChanged();
}
: null,
isDisabled: _selectedAlbums.albums.isEmpty,
);
},
),
)
: null,
@@ -160,8 +154,16 @@ class _AlbumsWidgetSettingsState extends State<AlbumsWidgetSettings> {
CollectionsService.instance.getCollectionForOnEnteSection(),
builder: (context, snapshot) {
if (snapshot.hasData) {
final data = snapshot.data!;
for (final collection in snapshot.data!) {
if (_selectedAlbums.albums.contains(collection)) {
data.remove(collection);
data.insert(0, collection);
}
}
return CollectionsFlexiGridViewWidget(
snapshot.data,
data,
displayLimitCount: snapshot.data!.length,
shrinkWrap: false,
selectedAlbums: _selectedAlbums,