v2.52.4 — Einstellungen (F4): Auto-Sync-Intervall, Sleep-Timer-Default, Wiedergabegeschwindigkeit, Akzentfarbe, Storage-Info

This commit is contained in:
Dustin
2026-08-05 11:05:55 +02:00
parent 187b26603b
commit bc3357bf72
7 changed files with 411 additions and 17 deletions
+26 -3
View File
@@ -1,6 +1,7 @@
import 'dart:async';
import 'package:flutter/material.dart';
import 'package:just_audio/just_audio.dart';
import 'package:shared_preferences/shared_preferences.dart';
import 'farb_theme.dart';
/// Login-Effekte: Pro Person eigener Akzent, Willkommens-Sound und Begrüßung.
@@ -39,13 +40,35 @@ class UserEffekt {
return standard;
}
/// Key der per-User-Akzentfarbe in den SharedPreferences.
static String akzentKey(String? user) =>
'akzent_farbe_${(user ?? '').toLowerCase().trim()}';
/// '#RRGGBB' (oder 'RRGGBB') → Color; null bei ungültigem Format.
static Color? farbeAusHex(String? hex) {
if (hex == null) return null;
final h = hex.replaceFirst('#', '').trim();
if (h.length != 6) return null;
final v = int.tryParse(h, radix: 16);
if (v == null) return null;
return Color(0xFF000000 | v);
}
/// Setzt die Akzentfarbe (Thema wechselt live) und spielt den Sound ab.
/// Die in den Einstellungen gespeicherte Akzentfarbe
/// (`akzent_farbe_<user>`, F4) hat Vorrang vor der Standard-Farbe des Users.
static Future<void> anwenden(String? user) async {
final e = fuer(user);
MeloTheme.akzent = e.akzent;
var farbe = fuer(user).akzent;
try {
final p = await SharedPreferences.getInstance();
farbe = farbeAusHex(p.getString(akzentKey(user))) ?? farbe;
} catch (_) {
// Prefs-Fehler ignorieren — Standard-Akzent bleibt
}
MeloTheme.akzent = farbe;
try {
final p = AudioPlayer();
await p.setAsset(e.soundAsset);
await p.setAsset(fuer(user).soundAsset);
unawaited(p.play());
// Player nach dem Abspielen sauber freigeben (kein Memory-Leak)
Future.delayed(const Duration(seconds: 4), () {