UX-Simulation, Teil 2: Player-Feinschliff, Downloads, Einstellungen
Zweiter Block aus der UX-Simulation (39 Funde insgesamt): - Songtext-Icon deaktiviert statt totem Knopf, wenn kein Ziel bekannt ist - Sleep-Timer-Restzeit jetzt auch im Sheet sichtbar, nicht nur im Tooltip - Drag-Handle in der Warteschlange, Wisch-nach-unten schließt den Vollbild-Player - Fehlender Tooltip am Songtext-Sheet-Schließen-Knopf ergänzt - YouTube-Download: Zeitüberschreitung meldet sich anders als toter Server - Server-Tab zeigte beim Öffnen kurz fälschlich "nicht verbunden" - Einstellungen: Favoriten-/Playlisten-Sync von "Speicher" zu "Musikserver" verschoben, Navidrome-Eintrag erklärt jetzt seinen Zweck - Kommentar in geteilte_adresse.dart korrigiert (Verhalten unverändert, dafür gibt es einen Test) Bewusst zurückgestellt: ServerFavoriteButton bleibt lokal-only (dokumentierte Architektur-Entscheidung, siehe G3 im UX-Review), Live-Wischgeste am Mini-Player, YouTube-Download-Abbrechen, Download-Badge im inaktiven Unterreiter, Versionsnummer (neue Abhängigkeit nötig). 539 Tests grün (vorher 537), flutter analyze ohne Befund.
This commit is contained in:
@@ -41,6 +41,7 @@ class QueueScreen extends StatelessWidget {
|
||||
handler.moveQueueItem(oldIndex, newIndex),
|
||||
itemBuilder: (context, i) => _Zeile(
|
||||
key: ValueKey(queue[i].id),
|
||||
index: i,
|
||||
item: queue[i],
|
||||
laeuft: queue[i].id == currentId,
|
||||
onSpringen: () => handler.skipToQueueItem(i),
|
||||
@@ -63,12 +64,15 @@ class QueueScreen extends StatelessWidget {
|
||||
class _Zeile extends StatelessWidget {
|
||||
const _Zeile({
|
||||
super.key,
|
||||
required this.index,
|
||||
required this.item,
|
||||
required this.laeuft,
|
||||
required this.onSpringen,
|
||||
required this.onEntfernen,
|
||||
});
|
||||
|
||||
/// Position in der Warteschlange — nötig für das Drag-Handle.
|
||||
final int index;
|
||||
final MediaItem item;
|
||||
|
||||
/// Dieser Eintrag steht in der Wiedergabe — auch pausiert.
|
||||
@@ -113,10 +117,24 @@ class _Zeile extends StatelessWidget {
|
||||
),
|
||||
subtitle: Text(item.artist ?? 'Unbekannt',
|
||||
maxLines: 1, overflow: TextOverflow.ellipsis),
|
||||
trailing: IconButton(
|
||||
tooltip: 'Aus Warteschlange entfernen',
|
||||
icon: const Icon(Icons.close),
|
||||
onPressed: onEntfernen,
|
||||
// Ohne sichtbares Handle war Umsortieren nur per unmarkiertem
|
||||
// Long-Press-and-Drag irgendwo auf der Zeile auffindbar.
|
||||
trailing: Row(
|
||||
mainAxisSize: MainAxisSize.min,
|
||||
children: [
|
||||
IconButton(
|
||||
tooltip: 'Aus Warteschlange entfernen',
|
||||
icon: const Icon(Icons.close),
|
||||
onPressed: onEntfernen,
|
||||
),
|
||||
ReorderableDragStartListener(
|
||||
index: index,
|
||||
child: const Padding(
|
||||
padding: EdgeInsets.symmetric(horizontal: 4),
|
||||
child: Icon(Icons.drag_handle, color: MeloTheme.text3),
|
||||
),
|
||||
),
|
||||
],
|
||||
),
|
||||
onTap: onSpringen,
|
||||
);
|
||||
|
||||
Reference in New Issue
Block a user