Fix: Review-Findings korrigiert (Tag-Leiste, Profil, Singleton u.a.)
CRIT: - Tag-Leiste: Toggle-Kopf 'Tags & Filter' eingebaut (war unerreichbar) + TagStats - Profil: Cloud-Count vor Dialog aufloesen (kein 'Instance of Future' mehr) HIGH: - CloudEinstellungen: toten Sync-Timer entfernt (echter Timer im ViewModel) - StatistikCard + RecentWidget jetzt eingebaut (gesamtMB/gesamtMin endlich genutzt) - CloudService als Singleton (konsistenter Token-Zustand in allen Services) MED/LOW: - Playlist-Erkennung nur noch via list= Parameter - Player: fehlende Quelle wird geloggt statt still - song_tile: null-ID-Guard vor Tag-Dialog - Scanner-Log mit Exception-Objekt - FavoritenService: anzahlFavoriten() fuer StatistikCard
This commit is contained in:
@@ -1,4 +1,3 @@
|
||||
import 'dart:async';
|
||||
import 'package:flutter/material.dart';
|
||||
import 'package:shared_preferences/shared_preferences.dart';
|
||||
import '../services/cloud_service.dart';
|
||||
@@ -16,7 +15,6 @@ class CloudEinstellungen extends StatefulWidget {
|
||||
class _CloudEinstellungenState extends State<CloudEinstellungen> {
|
||||
bool _autoSync = true;
|
||||
int _syncIntervall = 6; // Stunden
|
||||
Timer? _syncTimer;
|
||||
|
||||
@override
|
||||
void initState() {
|
||||
@@ -24,12 +22,6 @@ class _CloudEinstellungenState extends State<CloudEinstellungen> {
|
||||
_ladeSettings();
|
||||
}
|
||||
|
||||
@override
|
||||
void dispose() {
|
||||
_syncTimer?.cancel();
|
||||
super.dispose();
|
||||
}
|
||||
|
||||
Future<void> _ladeSettings() async {
|
||||
final p = await SharedPreferences.getInstance();
|
||||
if (mounted) {
|
||||
@@ -39,19 +31,9 @@ class _CloudEinstellungenState extends State<CloudEinstellungen> {
|
||||
});
|
||||
}
|
||||
}
|
||||
|
||||
void _starteAutoSync() {
|
||||
_syncTimer?.cancel();
|
||||
if (!_autoSync || _syncIntervall == 0) return;
|
||||
_syncTimer = Timer.periodic(
|
||||
Duration(hours: _syncIntervall),
|
||||
(_) => _triggerSync(),
|
||||
);
|
||||
}
|
||||
|
||||
void _triggerSync() {
|
||||
// Wird vom CloudService in cloud_screen.dart erledigt
|
||||
}
|
||||
// Hinweis: Der echte Auto-Sync-Timer läuft im MeloHomeViewModel
|
||||
// (_starteCloudSyncScheduler). Dieser Dialog speichert nur die Einstellungen;
|
||||
// die Änderungen greifen beim nächsten App-Start bzw. über "Jetzt synchronisieren".
|
||||
|
||||
@override
|
||||
Widget build(BuildContext context) {
|
||||
@@ -76,8 +58,7 @@ class _CloudEinstellungenState extends State<CloudEinstellungen> {
|
||||
onChanged: (v) async {
|
||||
setState(() => _autoSync = v);
|
||||
final p = await SharedPreferences.getInstance();
|
||||
p.setBool('cloud_auto', v);
|
||||
_starteAutoSync();
|
||||
await p.setBool('cloud_auto', v);
|
||||
},
|
||||
),
|
||||
const Divider(color: MeloTheme.dunkel2),
|
||||
@@ -95,8 +76,7 @@ class _CloudEinstellungenState extends State<CloudEinstellungen> {
|
||||
if (v == null) return;
|
||||
setState(() => _syncIntervall = v);
|
||||
final p = await SharedPreferences.getInstance();
|
||||
p.setInt('cloud_interval', v);
|
||||
_starteAutoSync();
|
||||
await p.setInt('cloud_interval', v);
|
||||
},
|
||||
);
|
||||
}),
|
||||
|
||||
Reference in New Issue
Block a user