Skip to content

Commit f9d27d8

Browse files
committed
refactor: improve offline song sorting and filtering logic
1 parent 113560f commit f9d27d8

1 file changed

Lines changed: 14 additions & 16 deletions

File tree

lib/screens/user_songs_page.dart

Lines changed: 14 additions & 16 deletions
Original file line numberDiff line numberDiff line change
@@ -51,23 +51,23 @@ class UserSongsPage extends StatefulWidget {
5151

5252
class _UserSongsPageState extends State<UserSongsPage> {
5353
bool _isEditEnabled = false;
54-
List<dynamic> _originalOfflineSongsList = [];
5554
final ValueNotifier<String> _searchQueryNotifier = ValueNotifier('');
5655
late final TextEditingController _searchController;
5756
late final FocusNode _searchFocusNode;
5857

59-
List _getFilteredList(List songsList) {
60-
return filterSongsByQuery(songsList, _searchQueryNotifier.value);
58+
List _getDisplayList(List songsList) {
59+
var list = filterSongsByQuery(songsList, _searchQueryNotifier.value);
60+
if (widget.page == 'offline') {
61+
list = _sortOfflineSongsLocal(list, _getCurrentOfflineSortType());
62+
}
63+
return list;
6164
}
6265

6366
@override
6467
void initState() {
6568
super.initState();
6669
_searchController = TextEditingController();
6770
_searchFocusNode = FocusNode();
68-
if (widget.page == 'offline') {
69-
_originalOfflineSongsList = List<dynamic>.from(userOfflineSongs);
70-
}
7171
}
7272

7373
@override
@@ -262,7 +262,6 @@ class _UserSongsPageState extends State<UserSongsPage> {
262262
addOrUpdateData('settings', 'offlineSortType', type.name);
263263
offlineSortSetting = type.name;
264264
});
265-
_sortOfflineSongs(type);
266265
},
267266
),
268267
],
@@ -333,7 +332,7 @@ class _UserSongsPageState extends State<UserSongsPage> {
333332
valueListenable: _searchQueryNotifier,
334333
builder: (_, searchQuery, __) {
335334
final isSearching = searchQuery.isNotEmpty;
336-
final displayList = _getFilteredList(songsList);
335+
final displayList = _getDisplayList(songsList);
337336
final playlist = {
338337
'ytid': '',
339338
'title': title,
@@ -451,34 +450,33 @@ class _UserSongsPageState extends State<UserSongsPage> {
451450
};
452451
}
453452

454-
void _sortOfflineSongs(OfflineSortType type) {
453+
List _sortOfflineSongsLocal(List list, OfflineSortType type) {
454+
final sortedList = List<dynamic>.from(list);
455455
switch (type) {
456456
case OfflineSortType.default_:
457-
userOfflineSongs
458-
..clear()
459-
..addAll(_originalOfflineSongsList);
460-
return;
457+
return sortedList;
461458
case OfflineSortType.title:
462-
userOfflineSongs.sort((a, b) {
459+
sortedList.sort((a, b) {
463460
final titleA = (a['title'] ?? '').toString().toLowerCase();
464461
final titleB = (b['title'] ?? '').toString().toLowerCase();
465462
return titleA.compareTo(titleB);
466463
});
467464
break;
468465
case OfflineSortType.artist:
469-
userOfflineSongs.sort((a, b) {
466+
sortedList.sort((a, b) {
470467
final artistA = (a['artist'] ?? '').toString().toLowerCase();
471468
final artistB = (b['artist'] ?? '').toString().toLowerCase();
472469
return artistA.compareTo(artistB);
473470
});
474471
break;
475472
case OfflineSortType.dateAdded:
476-
userOfflineSongs.sort((a, b) {
473+
sortedList.sort((a, b) {
477474
final dateA = a['dateAdded'] as int? ?? 0;
478475
final dateB = b['dateAdded'] as int? ?? 0;
479476
return dateB.compareTo(dateA);
480477
});
481478
break;
482479
}
480+
return sortedList;
483481
}
484482
}

0 commit comments

Comments
 (0)