diff --git a/src/lib/domain/modules/dynamic_queue.dart b/src/lib/domain/modules/dynamic_queue.dart index 1d5e893..737eb9d 100644 --- a/src/lib/domain/modules/dynamic_queue.dart +++ b/src/lib/domain/modules/dynamic_queue.dart @@ -193,7 +193,7 @@ class DynamicQueue implements ManagedQueueInfo { void removeQueueIndices(List indices, bool permanent) { _log.d('removeQueueIndices'); - for (final index in indices..sort(((a, b) => -a.compareTo(b)))) { + for (final index in indices..sort((a, b) => -a.compareTo(b))) { final queueItem = _queue[index]; if (permanent) { @@ -316,9 +316,9 @@ class DynamicQueue implements ManagedQueueInfo { newSongs = await _shufflePlusQueue(filteredAvailableSongs, songsToQueue); } - newSongs.forEach((qi) { + for (final qi in newSongs) { qi.isAvailable = false; - }); + } _queue.addAll(newSongs); _queueSubject.add(_queue); _availableSongsSubject.add(_availableSongs); @@ -475,9 +475,9 @@ class DynamicQueue implements ManagedQueueInfo { } // these qi are the same objects as in _availableSongs -> marks them to not be queued (again) - queue.forEach((qi) { + for (final qi in queue) { qi.isAvailable = false; - }); + } _queue = queue.cast(); _queueSubject.add(_queue); return 0; @@ -494,7 +494,9 @@ class DynamicQueue implements ManagedQueueInfo { final linkedSong = await getQueueItemWithLinks(locallyAvailableSongs[index], queueItems); queue.addAll(linkedSong); if (linkedSong.length > 1) { - linkedSong.forEach((q) => locallyAvailableSongs.removeWhere((e) => e.song == q.song)); + for (final q in linkedSong) { + locallyAvailableSongs.removeWhere((e) => e.song == q.song); + } } else { locallyAvailableSongs.removeAt(index); } diff --git a/src/lib/presentation/pages/home_settings_page.dart b/src/lib/presentation/pages/home_settings_page.dart index e0eccff..8d8791f 100644 --- a/src/lib/presentation/pages/home_settings_page.dart +++ b/src/lib/presentation/pages/home_settings_page.dart @@ -86,11 +86,11 @@ class HomeSettingsPage extends StatelessWidget { background: Container( width: double.infinity, color: RED, - child: Padding( - padding: const EdgeInsets.symmetric(horizontal: HORIZONTAL_PADDING), + child: const Padding( + padding: EdgeInsets.symmetric(horizontal: HORIZONTAL_PADDING), child: Row( mainAxisAlignment: MainAxisAlignment.spaceBetween, - children: const [ + children: [ Icon( Icons.delete_forever_rounded, color: Colors.white, diff --git a/src/lib/presentation/pages/import_page.dart b/src/lib/presentation/pages/import_page.dart index 8a5c17b..2f85b1b 100644 --- a/src/lib/presentation/pages/import_page.dart +++ b/src/lib/presentation/pages/import_page.dart @@ -2,14 +2,10 @@ import 'package:flutter/material.dart'; -import 'package:flutter/services.dart'; -import 'package:flutter_mobx/flutter_mobx.dart'; import 'package:get_it/get_it.dart'; -import '../state/import_store.dart'; import '../state/navigation_store.dart'; import '../theming.dart'; -import '../widgets/settings_section.dart'; class ImportPage extends StatefulWidget { const ImportPage({Key? key, required this.importPath}) : super(key: key); @@ -21,12 +17,10 @@ class ImportPage extends StatefulWidget { } class _ImportPageState extends State { - late final ImportStore _importStore; late final NavigationStore _navStore; @override void initState() { - _importStore = GetIt.I(param1: widget.importPath); _navStore = GetIt.I(); super.initState(); @@ -36,7 +30,7 @@ class _ImportPageState extends State { Widget build(BuildContext context) { return Scaffold( appBar: AppBar( - title: Text( + title: const Text( 'Import Data', style: TEXT_HEADER, ), @@ -53,7 +47,7 @@ class _ImportPageState extends State { centerTitle: true, ), body: ListView( - children: [ + children: const [ // Observer(builder: (context) { // final dataInfo = _importStore.appData; // if (dataInfo == null) { diff --git a/src/lib/presentation/pages/init/init_workflow.dart b/src/lib/presentation/pages/init/init_workflow.dart index 014dc0d..3708553 100644 --- a/src/lib/presentation/pages/init/init_workflow.dart +++ b/src/lib/presentation/pages/init/init_workflow.dart @@ -81,9 +81,9 @@ class _InitWorkflowState extends State { child: Align( alignment: Alignment.centerLeft, child: FilledButton( - child: Row( + child: const Row( mainAxisSize: MainAxisSize.min, - children: const [ + children: [ Icon(Icons.chevron_left_rounded), Text('Back'), SizedBox(width: 10), diff --git a/src/lib/presentation/pages/playlist_page.dart b/src/lib/presentation/pages/playlist_page.dart index 9912a6c..504c875 100644 --- a/src/lib/presentation/pages/playlist_page.dart +++ b/src/lib/presentation/pages/playlist_page.dart @@ -5,10 +5,8 @@ import 'package:get_it/get_it.dart'; import 'package:reorderables/reorderables.dart'; import '../../domain/entities/playlist.dart'; -import '../../domain/entities/shuffle_mode.dart'; import '../../domain/entities/song.dart'; import '../l10n_utils.dart'; -import '../mucke_icons.dart'; import '../state/audio_store.dart'; import '../state/music_data_store.dart'; import '../state/navigation_store.dart'; @@ -67,20 +65,6 @@ class _PlaylistPageState extends State { (Duration d, s) => d + s.duration, ); - IconData playIcon = Icons.play_arrow_rounded; - switch (playlist.shuffleMode) { - case ShuffleMode.standard: - playIcon = Icons.shuffle_rounded; - break; - case ShuffleMode.plus: - playIcon = MuckeIcons.shuffle_heart; - break; - case ShuffleMode.none: - playIcon = MuckeIcons.shuffle_none; - break; - default: - } - return Scrollbar( child: CustomScrollView( slivers: [ @@ -207,13 +191,13 @@ class _PlaylistPageState extends State { background: Container( width: double.infinity, color: RED, - child: Padding( - padding: const EdgeInsets.symmetric( + child: const Padding( + padding: EdgeInsets.symmetric( horizontal: HORIZONTAL_PADDING, ), child: Row( mainAxisAlignment: MainAxisAlignment.spaceBetween, - children: const [ + children: [ Icon( Icons.playlist_remove_rounded, color: Colors.white, diff --git a/src/lib/presentation/pages/queue_page.dart b/src/lib/presentation/pages/queue_page.dart index cb05b2e..96b110e 100644 --- a/src/lib/presentation/pages/queue_page.dart +++ b/src/lib/presentation/pages/queue_page.dart @@ -179,11 +179,11 @@ class QueuePage extends StatelessWidget { background: Container( width: double.infinity, color: RED, - child: Padding( - padding: const EdgeInsets.symmetric(horizontal: HORIZONTAL_PADDING), + child: const Padding( + padding: EdgeInsets.symmetric(horizontal: HORIZONTAL_PADDING), child: Row( mainAxisAlignment: MainAxisAlignment.spaceBetween, - children: const [ + children: [ Icon( Icons.playlist_remove_rounded, color: Colors.white, diff --git a/src/lib/presentation/pages/smart_list_page.dart b/src/lib/presentation/pages/smart_list_page.dart index cbd967e..9e67cfa 100644 --- a/src/lib/presentation/pages/smart_list_page.dart +++ b/src/lib/presentation/pages/smart_list_page.dart @@ -3,11 +3,9 @@ import 'package:flutter_gen/gen_l10n/localizations.dart'; import 'package:flutter_mobx/flutter_mobx.dart'; import 'package:get_it/get_it.dart'; -import '../../domain/entities/shuffle_mode.dart'; import '../../domain/entities/smart_list.dart'; import '../../domain/entities/song.dart'; import '../l10n_utils.dart'; -import '../mucke_icons.dart'; import '../state/audio_store.dart'; import '../state/music_data_store.dart'; import '../state/navigation_store.dart'; @@ -63,20 +61,6 @@ class _SmartListPageState extends State { (Duration d, s) => d + s.duration, ); - IconData playIcon = Icons.play_arrow_rounded; - switch (smartList.shuffleMode) { - case ShuffleMode.standard: - playIcon = Icons.shuffle_rounded; - break; - case ShuffleMode.plus: - playIcon = MuckeIcons.shuffle_heart; - break; - case ShuffleMode.none: - playIcon = MuckeIcons.shuffle_none; - break; - default: - } - return Scrollbar( child: CustomScrollView( slivers: [ diff --git a/src/lib/presentation/pages/songs_page.dart b/src/lib/presentation/pages/songs_page.dart index b261498..70c6c46 100644 --- a/src/lib/presentation/pages/songs_page.dart +++ b/src/lib/presentation/pages/songs_page.dart @@ -61,9 +61,9 @@ class _SongsPageState extends State with AutomaticKeepAliveClientMixi ); case StreamStatus.waiting: case StreamStatus.done: - return Column( + return const Column( mainAxisAlignment: MainAxisAlignment.center, - children: const [ + children: [ CircularProgressIndicator(), Text('Loading items...'), ], diff --git a/src/lib/presentation/widgets/album_art_swipe.dart b/src/lib/presentation/widgets/album_art_swipe.dart index 03a5ca4..5afb3d2 100644 --- a/src/lib/presentation/widgets/album_art_swipe.dart +++ b/src/lib/presentation/widgets/album_art_swipe.dart @@ -1,6 +1,5 @@ import 'dart:async'; -import 'package:fimber/fimber.dart'; import 'package:flutter/material.dart'; import 'package:get_it/get_it.dart'; @@ -11,8 +10,6 @@ import 'album_art.dart'; class AlbumArtSwipe extends StatefulWidget { const AlbumArtSwipe({Key? key}) : super(key: key); - static final _log = FimberLog('AlbumArtSwipe'); - @override State createState() => _AlbumArtSwipeState(); } diff --git a/src/lib/presentation/widgets/cover_sliver_appbar.dart b/src/lib/presentation/widgets/cover_sliver_appbar.dart index 8adb7d3..825d2fe 100644 --- a/src/lib/presentation/widgets/cover_sliver_appbar.dart +++ b/src/lib/presentation/widgets/cover_sliver_appbar.dart @@ -1,4 +1,3 @@ -import 'dart:ui'; import 'package:flutter/material.dart'; import 'package:get_it/get_it.dart'; diff --git a/src/lib/presentation/widgets/currently_playing_control.dart b/src/lib/presentation/widgets/currently_playing_control.dart index 1b0ce89..0bf4f21 100644 --- a/src/lib/presentation/widgets/currently_playing_control.dart +++ b/src/lib/presentation/widgets/currently_playing_control.dart @@ -9,8 +9,8 @@ class CurrentlyPlayingControl extends StatelessWidget { @override Widget build(BuildContext context) { - return Column( - children: const [ + return const Column( + children: [ SizedBox(height: 10.0), Padding( padding: EdgeInsets.symmetric(horizontal: 12.0 + 2.0), diff --git a/src/lib/presentation/widgets/playback_control.dart b/src/lib/presentation/widgets/playback_control.dart index fb5ad32..f0856f5 100644 --- a/src/lib/presentation/widgets/playback_control.dart +++ b/src/lib/presentation/widgets/playback_control.dart @@ -11,8 +11,8 @@ class PlaybackControl extends StatelessWidget { @override Widget build(BuildContext context) { - return Row( - children: const [ + return const Row( + children: [ LoopButton(iconSize: 24.0), PreviousButton(iconSize: 48.0), PlayPauseButton( diff --git a/src/lib/system/datasources/drift/history_dao.dart b/src/lib/system/datasources/drift/history_dao.dart index 7442d80..0282170 100644 --- a/src/lib/system/datasources/drift/history_dao.dart +++ b/src/lib/system/datasources/drift/history_dao.dart @@ -55,9 +55,9 @@ class HistoryDao extends DatabaseAccessor } final historyStream = query.watch(); - final slArtistStream = (select(smartListArtists).join( + final slArtistStream = select(smartListArtists).join( [innerJoin(artists, artists.name.equalsExp(smartListArtists.artistName))], - )).watch(); + ).watch(); return Rx.combineLatest2, List, List>( historyStream, @@ -80,9 +80,9 @@ class HistoryDao extends DatabaseAccessor playable = PlaylistModel.fromDrift(e.readTable(playlists)); break; case PlayableType.smartlist: - final driftArtists = (slArtists.where((element) => + final driftArtists = slArtists.where((element) => element.readTable(smartListArtists).smartListId == - int.parse(entry.identifier))).map((e) => e.readTable(artists)).toList(); + int.parse(entry.identifier)).map((e) => e.readTable(artists)).toList(); playable = SmartListModel.fromDrift(e.readTable(smartLists), driftArtists); break; case PlayableType.search: diff --git a/src/lib/system/datasources/drift/persistent_state_dao.dart b/src/lib/system/datasources/drift/persistent_state_dao.dart index d72ed62..1e2e4f4 100644 --- a/src/lib/system/datasources/drift/persistent_state_dao.dart +++ b/src/lib/system/datasources/drift/persistent_state_dao.dart @@ -192,9 +192,9 @@ class PersistentStateDao extends DatabaseAccessor result = null; else { final slArtists = - await ((select(smartListArtists)..where((tbl) => tbl.smartListId.equals(slId))).join( + await (select(smartListArtists)..where((tbl) => tbl.smartListId.equals(slId))).join( [innerJoin(artists, artists.name.equalsExp(smartListArtists.artistName))], - )).map((p0) => p0.readTable(artists)).get(); + ).map((p0) => p0.readTable(artists)).get(); result = SmartListModel.fromDrift(sl, slArtists); } diff --git a/src/lib/system/datasources/drift/playlist_dao.dart b/src/lib/system/datasources/drift/playlist_dao.dart index 5ac32dc..3f055cd 100644 --- a/src/lib/system/datasources/drift/playlist_dao.dart +++ b/src/lib/system/datasources/drift/playlist_dao.dart @@ -89,12 +89,12 @@ class PlaylistDao extends DatabaseAccessor @override Stream> getPlaylistSongStream(PlaylistModel playlist) { - return ((select(playlistEntries) + return (select(playlistEntries) ..where((tbl) => tbl.playlistId.equals(playlist.id)) ..orderBy([(t) => OrderingTerm.asc(t.position)])) .join( [innerJoin(songs, songs.path.equalsExp(playlistEntries.songPath))], - )).watch().map((driftSongList) => + ).watch().map((driftSongList) => driftSongList.map((driftSong) => SongModel.fromDrift(driftSong.readTable(songs))).toList()); } @@ -221,9 +221,9 @@ class PlaylistDao extends DatabaseAccessor Stream> get smartListsStream { final slStream = select(smartLists).watch(); - final slArtistStream = (select(smartListArtists).join( + final slArtistStream = select(smartListArtists).join( [innerJoin(artists, artists.name.equalsExp(smartListArtists.artistName))], - )).watch(); + ).watch(); return Rx.combineLatest2, List, List>( slStream, @@ -231,7 +231,7 @@ class PlaylistDao extends DatabaseAccessor (a, b) { return a.map((sl) { final driftArtists = - (b.where((element) => element.readTable(smartListArtists).smartListId == sl.id)) + b.where((element) => element.readTable(smartListArtists).smartListId == sl.id) .map((e) => e.readTable(artists)) .toList(); return SmartListModel.fromDrift(sl, driftArtists); @@ -340,9 +340,9 @@ class PlaylistDao extends DatabaseAccessor @override Future> searchSmartLists(String searchText, {int? limit}) async { - final slArtists = await (select(smartListArtists).join( + final slArtists = await select(smartListArtists).join( [innerJoin(artists, artists.name.equalsExp(smartListArtists.artistName))], - )).get(); + ).get(); final List result = await (select(smartLists) ..where((tbl) => tbl.name.regexp(searchText, dotAll: true, caseSensitive: false))) @@ -350,8 +350,8 @@ class PlaylistDao extends DatabaseAccessor .then( (driftList) { return driftList.map((driftSmartList) { - final driftArtists = (slArtists.where((element) => - element.readTable(smartListArtists).smartListId == driftSmartList.id)) + final driftArtists = slArtists.where((element) => + element.readTable(smartListArtists).smartListId == driftSmartList.id) .map((e) => e.readTable(artists)) .toList(); return SmartListModel.fromDrift(driftSmartList, driftArtists); @@ -418,12 +418,12 @@ class PlaylistDao extends DatabaseAccessor @override Future> getPlaylistSongs(PlaylistModel playlist) async { - return await ((select(playlistEntries) + return await (select(playlistEntries) ..where((tbl) => tbl.playlistId.equals(playlist.id)) ..orderBy([(t) => OrderingTerm.asc(t.position)])) .join( [innerJoin(songs, songs.path.equalsExp(playlistEntries.songPath))], - )).get().then((driftSongList) => + ).get().then((driftSongList) => driftSongList.map((driftSong) => SongModel.fromDrift(driftSong.readTable(songs))).toList()); } @@ -438,13 +438,13 @@ class PlaylistDao extends DatabaseAccessor Future> getSmartlists() async { final sls = await select(smartLists).get(); - final slArtists = await (select(smartListArtists).join( + final slArtists = await select(smartListArtists).join( [innerJoin(artists, artists.name.equalsExp(smartListArtists.artistName))], - )).get(); + ).get(); return sls.map((sl) { final driftArtists = - (slArtists.where((element) => element.readTable(smartListArtists).smartListId == sl.id)) + slArtists.where((element) => element.readTable(smartListArtists).smartListId == sl.id) .map((e) => e.readTable(artists)) .toList(); return SmartListModel.fromDrift(sl, driftArtists); diff --git a/src/lib/system/datasources/local_music_fetcher_impl.dart b/src/lib/system/datasources/local_music_fetcher_impl.dart index faf09ed..46ec33e 100644 --- a/src/lib/system/datasources/local_music_fetcher_impl.dart +++ b/src/lib/system/datasources/local_music_fetcher_impl.dart @@ -91,7 +91,7 @@ class LocalMusicFetcherImpl implements LocalMusicFetcher { // => also update, when the file was created later (and wasn't really changed) // this is used as a workaround because android // doesn't seem to return the correct modification time - final lastModified = await songFile.lastModified(); + final lastModified = songFile.lastModifiedSync(); final song = await _musicDataSource.getSongByPath(songFile.path); int? albumId; @@ -233,12 +233,12 @@ class LocalMusicFetcherImpl implements LocalMusicFetcher { Future> getAllFilesRecursively(String path) async { final List files = []; - if (await FileSystemEntity.isDirectory(path)) { + if (FileSystemEntity.isDirectorySync(path)) { final dir = Directory(path); - await for (var entity in dir.list(recursive: true, followLinks: false)) { + await for (final entity in dir.list(recursive: true, followLinks: false)) { files.addAll(await getAllFilesRecursively(entity.path)); } - } else if (await FileSystemEntity.isFile(path)) { + } else if (FileSystemEntity.isFileSync(path)) { files.add(File(path)); } return files; diff --git a/src/lib/system/models/album_model.dart b/src/lib/system/models/album_model.dart index fe91bf8..2081344 100644 --- a/src/lib/system/models/album_model.dart +++ b/src/lib/system/models/album_model.dart @@ -5,7 +5,6 @@ import 'package:metadata_god/metadata_god.dart'; import '../../domain/entities/album.dart'; import '../datasources/drift_database.dart'; -import '../utils.dart'; import 'default_values.dart'; class AlbumModel extends Album { diff --git a/src/lib/system/models/playback_state_model.dart b/src/lib/system/models/playback_state_model.dart index f4a5116..7ec5d56 100644 --- a/src/lib/system/models/playback_state_model.dart +++ b/src/lib/system/models/playback_state_model.dart @@ -2,25 +2,21 @@ import 'package:audio_service/audio_service.dart'; import '../../domain/entities/playback_state.dart' as entity; -class PlaybackStateModel { - - static entity.PlaybackState? fromASPlaybackState(PlaybackState? playbackState) { - if (playbackState == null) { - return null; - } - - if (playbackState.playing) { - return entity.PlaybackState.playing; - } else if (playbackState.processingState == AudioProcessingState.ready) { - return entity.PlaybackState.paused; - } - - switch (playbackState.processingState) { - case AudioProcessingState.completed: - return entity.PlaybackState.stopped; - default: - return entity.PlaybackState.none; - } +entity.PlaybackState? fromASPlaybackState(PlaybackState? playbackState) { + if (playbackState == null) { + return null; } + if (playbackState.playing) { + return entity.PlaybackState.playing; + } else if (playbackState.processingState == AudioProcessingState.ready) { + return entity.PlaybackState.paused; + } + + switch (playbackState.processingState) { + case AudioProcessingState.completed: + return entity.PlaybackState.stopped; + default: + return entity.PlaybackState.none; + } } diff --git a/src/lib/system/repositories/audio_player_repository_impl.dart b/src/lib/system/repositories/audio_player_repository_impl.dart index 2325c44..fb1777b 100644 --- a/src/lib/system/repositories/audio_player_repository_impl.dart +++ b/src/lib/system/repositories/audio_player_repository_impl.dart @@ -92,7 +92,6 @@ class AudioPlayerRepositoryImpl implements AudioPlayerRepository { _queueSubject.add(_dynamicQueue.queue); } - @override Future dispose() async { _audioPlayerDataSource.dispose(); }