Feature: Login freiwillig - einmalige Modus-Wahl beim ersten Start
- Erster Start: Dialog 'Cloud (empfohlen)' oder 'Nur lokal' -> wird gespeichert - Cloud gewaehlt: direkt Login-Dialog (Name + Passwort) - Lokal gewaehlt: App nutzt nur lokale Musik, kein Login noetig - Spaeter jederzeit im Cloud-Tab einloggbar
This commit is contained in:
@@ -51,6 +51,11 @@ class _MeloHomeState extends State<MeloHome> {
|
|||||||
setState(() => _nutzer = n);
|
setState(() => _nutzer = n);
|
||||||
_vm.setzeNutzer(n);
|
_vm.setzeNutzer(n);
|
||||||
}
|
}
|
||||||
|
// Erster Start? → einmalig Modus wählen (Cloud oder nur lokal) – Login ist freiwillig
|
||||||
|
if (!p.containsKey('melo_modus')) {
|
||||||
|
await _zeigeModusWahl();
|
||||||
|
return;
|
||||||
|
}
|
||||||
// Login-Effekt beim App-Start: nur wenn ein Token vorhanden ist (eingeloggt)
|
// Login-Effekt beim App-Start: nur wenn ein Token vorhanden ist (eingeloggt)
|
||||||
final ok = await CloudService().restoreLogin();
|
final ok = await CloudService().restoreLogin();
|
||||||
if (ok && mounted) {
|
if (ok && mounted) {
|
||||||
@@ -62,6 +67,42 @@ class _MeloHomeState extends State<MeloHome> {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/// Einmalige Auswahl beim ersten App-Start: Cloud-Sync oder nur lokal.
|
||||||
|
Future<void> _zeigeModusWahl() async {
|
||||||
|
if (!mounted) return;
|
||||||
|
final cloud = await showDialog<bool>(
|
||||||
|
context: context,
|
||||||
|
barrierDismissible: false,
|
||||||
|
builder: (ctx) => AlertDialog(
|
||||||
|
backgroundColor: MeloTheme.dunkel1,
|
||||||
|
title: const Text('👋 Willkommen bei Melo!',
|
||||||
|
style: TextStyle(color: Colors.white, fontSize: 16)),
|
||||||
|
content: const Text(
|
||||||
|
'Wie möchtest du Melo nutzen?',
|
||||||
|
style: TextStyle(color: Colors.white, fontSize: 14),
|
||||||
|
),
|
||||||
|
actions: [
|
||||||
|
TextButton(
|
||||||
|
onPressed: () => Navigator.pop(ctx, false),
|
||||||
|
child: const Text('📱 Nur lokal',
|
||||||
|
style: TextStyle(color: Colors.white)),
|
||||||
|
),
|
||||||
|
TextButton(
|
||||||
|
onPressed: () => Navigator.pop(ctx, true),
|
||||||
|
child: const Text('☁️ Cloud (empfohlen)',
|
||||||
|
style: TextStyle(color: MeloTheme.rot, fontWeight: FontWeight.bold)),
|
||||||
|
),
|
||||||
|
],
|
||||||
|
),
|
||||||
|
);
|
||||||
|
final p = await SharedPreferences.getInstance();
|
||||||
|
await p.setString('melo_modus', cloud == true ? 'cloud' : 'lokal');
|
||||||
|
// Cloud gewählt → direkt zum Login-Dialog (Name + Passwort)
|
||||||
|
if (cloud == true && mounted) {
|
||||||
|
_nutzerWechseln();
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
void _zeigeProfil() {
|
void _zeigeProfil() {
|
||||||
showDialog(
|
showDialog(
|
||||||
context: context,
|
context: context,
|
||||||
|
|||||||
Reference in New Issue
Block a user