From bd3e2b999bc7d50794e05041271ff6f2566a20cc Mon Sep 17 00:00:00 2001 From: zarzet Date: Sun, 29 Mar 2026 01:45:32 +0700 Subject: [PATCH] feat: add play button to playlist/library track tiles Show a play IconButton (matching local album style) next to the more-options button when a track has a local file available. Uses PlaybackController.playTrackList to resolve and open the file. --- lib/screens/library_tracks_folder_screen.dart | 28 +++++++++++++------ 1 file changed, 19 insertions(+), 9 deletions(-) diff --git a/lib/screens/library_tracks_folder_screen.dart b/lib/screens/library_tracks_folder_screen.dart index a4acc687..bc6e9191 100644 --- a/lib/screens/library_tracks_folder_screen.dart +++ b/lib/screens/library_tracks_folder_screen.dart @@ -9,6 +9,7 @@ import 'package:spotiflac_android/l10n/l10n.dart'; import 'package:spotiflac_android/models/track.dart'; import 'package:spotiflac_android/providers/download_queue_provider.dart'; import 'package:spotiflac_android/providers/library_collections_provider.dart'; +import 'package:spotiflac_android/providers/playback_provider.dart'; import 'package:spotiflac_android/providers/local_library_provider.dart'; import 'package:spotiflac_android/services/library_database.dart'; import 'package:spotiflac_android/providers/settings_provider.dart'; @@ -1236,15 +1237,24 @@ class _CollectionTrackTile extends ConsumerWidget { ), trailing: isSelectionMode ? null - : IconButton( - tooltip: MaterialLocalizations.of(context).showMenuTooltip, - icon: Icon( - Icons.more_vert, - color: colorScheme.onSurfaceVariant, - size: 20, - ), - onPressed: () => _showTrackOptionsSheet(context, ref), - ), + : historyItem != null || localItem != null + ? IconButton( + tooltip: context.l10n.tooltipPlay, + onPressed: () { + ref + .read(playbackProvider.notifier) + .playTrackList([track]); + }, + icon: Icon( + Icons.play_arrow, + color: colorScheme.primary, + ), + style: IconButton.styleFrom( + backgroundColor: colorScheme.primaryContainer + .withValues(alpha: 0.3), + ), + ) + : null, onTap: isSelectionMode ? onTap : () {