import 'package:flutter/foundation.dart'; import 'package:shared_preferences/shared_preferences.dart'; /// Nutzer-Einstellungen, die die ganze App betreffen. Werden beim Start /// einmal geladen und bei jeder Änderung sofort gespeichert. class AppSettings extends ChangeNotifier { static const _keyGroupCovers = 'gleiche_kategorie_gleiches_cover'; static const _keyAutoPlayHeadphones = 'autoplay_kopfhoerer'; static const _keyNormalizeVolume = 'gleiche_lautstaerke'; bool _groupCoversByCategory = true; bool _autoPlayOnHeadphones = false; bool _normalizeVolume = true; /// "Gleiche Kategorie = gleiches Coverbild" — an: das Cover kommt von der /// ersten Kategorie des Songs, aus: jeder Song zeigt sein eigenes Bild. bool get groupCoversByCategory => _groupCoversByCategory; /// Wiedergabe automatisch starten, sobald Kopfhörer verbunden werden. bool get autoPlayOnHeadphones => _autoPlayOnHeadphones; /// "Gleiche Lautstärke": laute Titel werden anhand ihres ReplayGain-Tags /// auf das Niveau der leiseren abgesenkt. bool get normalizeVolume => _normalizeVolume; Future init() async { final prefs = await SharedPreferences.getInstance(); _groupCoversByCategory = prefs.getBool(_keyGroupCovers) ?? true; _autoPlayOnHeadphones = prefs.getBool(_keyAutoPlayHeadphones) ?? false; _normalizeVolume = prefs.getBool(_keyNormalizeVolume) ?? true; notifyListeners(); } Future setGroupCoversByCategory(bool value) async { if (_groupCoversByCategory == value) return; _groupCoversByCategory = value; notifyListeners(); final prefs = await SharedPreferences.getInstance(); await prefs.setBool(_keyGroupCovers, value); } Future setNormalizeVolume(bool value) async { if (_normalizeVolume == value) return; _normalizeVolume = value; notifyListeners(); final prefs = await SharedPreferences.getInstance(); await prefs.setBool(_keyNormalizeVolume, value); } Future setAutoPlayOnHeadphones(bool value) async { if (_autoPlayOnHeadphones == value) return; _autoPlayOnHeadphones = value; notifyListeners(); final prefs = await SharedPreferences.getInstance(); await prefs.setBool(_keyAutoPlayHeadphones, value); } }