Files
Melo/lib/shared/sort_store.dart
T
dustinandClaude Opus 5 2667613a2e Neue Melo-UI Phase 1: 4 Tabs (Meine Musik/Suche/Favoriten/Download) + Sortierung
- Meine Musik als Startbildschirm ohne Topbar: Kopfzeile (Einstellungen,
  Suche, Musikerkennung), Schnellzugriffe, Shuffle + Sortieren, Liederliste
- Sortierung nach Zuletzt hinzugefuegt / Name (A-Z-#) / Wie oft abgespielt,
  auf- und absteigend, pro Liste gespeichert (SortStore)
- Favoriten als eigener Tab mit gleicher Shuffle-/Sortier-Leiste
- Download-Tab uebernimmt den Navidrome-Server-Browser
- DB-Schema 3: playCount, gezaehlt beim Titelstart
- Theme auf #0B0B10 / #c0392b
- Scan-Aktionen aus der entfallenen Topbar jetzt in den Einstellungen

Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_011snPXPafPC5i87o68H14W7
2026-08-20 18:00:53 +02:00

39 lines
1.2 KiB
Dart

import 'package:shared_preferences/shared_preferences.dart';
import '../library/song_sort.dart';
/// Sortier-Wahl einer Liederliste: Kriterium + Richtung.
class SortSetting {
const SortSetting(this.mode, {required this.ascending});
final SortMode mode;
final bool ascending;
}
/// Merkt sich die Sortier-Wahl pro Liste ([key] z. B. 'meine_musik'),
/// damit sie einen App-Neustart überlebt.
class SortStore {
static const meineMusik = 'meine_musik';
static const favoriten = 'favoriten';
static const _standard = SortSetting(SortMode.dateAdded, ascending: false);
static Future<SortSetting> load(String key) async {
final prefs = await SharedPreferences.getInstance();
final index = prefs.getInt('sort_${key}_mode');
if (index == null || index < 0 || index >= SortMode.values.length) {
return _standard;
}
final mode = SortMode.values[index];
return SortSetting(
mode,
ascending: prefs.getBool('sort_${key}_asc') ?? defaultAscending(mode),
);
}
static Future<void> save(String key, SortSetting setting) async {
final prefs = await SharedPreferences.getInstance();
await prefs.setInt('sort_${key}_mode', setting.mode.index);
await prefs.setBool('sort_${key}_asc', setting.ascending);
}
}