diff --git a/mobile/lib/ui/settings/widgets/albums_widget_settings.dart b/mobile/lib/ui/settings/widgets/albums_widget_settings.dart index 51645c9a83..dbf3d90754 100644 --- a/mobile/lib/ui/settings/widgets/albums_widget_settings.dart +++ b/mobile/lib/ui/settings/widgets/albums_widget_settings.dart @@ -24,21 +24,14 @@ class AlbumsWidgetSettings extends StatefulWidget { class _AlbumsWidgetSettingsState extends State { final _selectedAlbums = SelectedAlbums(); bool hasInstalledAny = false; - Set _albums = {}; @override void initState() { super.initState(); - _selectedAlbums.addListener(_selectedAlbumsListener); checkIfAnyWidgetInstalled(); selectExisting(); } - void _selectedAlbumsListener() { - _albums = _selectedAlbums.albums; - setState(() {}); - } - Future checkIfAnyWidgetInstalled() async { final count = await AlbumHomeWidgetService.instance.countHomeWidgets(); setState(() { @@ -76,12 +69,6 @@ class _AlbumsWidgetSettingsState extends State { _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 { 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 { 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,