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:
@@ -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,
|
||||
|
||||
Reference in New Issue
Block a user