Diagnose: Speicher-Fehler zeigt jetzt den Firebase-Fehlercode an
Der generische catch verschluckte die Ursache (Storage-Upload vs. Firestore-Write vs. anderes) — die Snackbar nennt jetzt plugin/code, zusätzlich debugPrint des vollen Fehlers. Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
This commit is contained in:
parent
5ed3a68e45
commit
5b8a99a26e
4 changed files with 28 additions and 3 deletions
|
|
@ -1,5 +1,6 @@
|
||||||
import 'dart:typed_data';
|
import 'dart:typed_data';
|
||||||
|
|
||||||
|
import 'package:firebase_core/firebase_core.dart';
|
||||||
import 'package:flutter/material.dart';
|
import 'package:flutter/material.dart';
|
||||||
import 'package:flutter_riverpod/flutter_riverpod.dart';
|
import 'package:flutter_riverpod/flutter_riverpod.dart';
|
||||||
import 'package:go_router/go_router.dart';
|
import 'package:go_router/go_router.dart';
|
||||||
|
|
@ -151,11 +152,18 @@ class _PlantFormScreenState extends ConsumerState<PlantFormScreen> {
|
||||||
));
|
));
|
||||||
}
|
}
|
||||||
if (mounted) context.pop();
|
if (mounted) context.pop();
|
||||||
} catch (_) {
|
} catch (error) {
|
||||||
|
// Der konkrete Grund (z. B. firebase_storage/unauthorized vs.
|
||||||
|
// cloud_firestore/permission-denied) entscheidet, wo der Fehler liegt —
|
||||||
|
// deshalb wird er mit angezeigt statt verschluckt.
|
||||||
|
debugPrint('Pflanze speichern fehlgeschlagen: $error');
|
||||||
|
final detail = error is FirebaseException
|
||||||
|
? '${error.plugin}/${error.code}'
|
||||||
|
: error.runtimeType.toString();
|
||||||
if (mounted) {
|
if (mounted) {
|
||||||
ScaffoldMessenger.of(context)
|
ScaffoldMessenger.of(context)
|
||||||
..hideCurrentSnackBar()
|
..hideCurrentSnackBar()
|
||||||
..showSnackBar(SnackBar(content: Text(l10n.saveError)));
|
..showSnackBar(SnackBar(content: Text(l10n.saveErrorDetail(detail))));
|
||||||
}
|
}
|
||||||
} finally {
|
} finally {
|
||||||
if (mounted) setState(() => _saving = false);
|
if (mounted) setState(() => _saving = false);
|
||||||
|
|
|
||||||
|
|
@ -225,5 +225,11 @@
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
"recognitionFailed": "Die Erkennung hat nicht geklappt – du kannst die Angaben auch von Hand eintragen.",
|
"recognitionFailed": "Die Erkennung hat nicht geklappt – du kannst die Angaben auch von Hand eintragen.",
|
||||||
"saveError": "Speichern fehlgeschlagen. Bitte versuche es erneut."
|
"saveError": "Speichern fehlgeschlagen. Bitte versuche es erneut.",
|
||||||
|
"saveErrorDetail": "Speichern fehlgeschlagen ({detail}). Bitte versuche es erneut.",
|
||||||
|
"@saveErrorDetail": {
|
||||||
|
"placeholders": {
|
||||||
|
"detail": { "type": "String" }
|
||||||
|
}
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
|
||||||
|
|
@ -819,6 +819,12 @@ abstract class AppLocalizations {
|
||||||
/// In de, this message translates to:
|
/// In de, this message translates to:
|
||||||
/// **'Speichern fehlgeschlagen. Bitte versuche es erneut.'**
|
/// **'Speichern fehlgeschlagen. Bitte versuche es erneut.'**
|
||||||
String get saveError;
|
String get saveError;
|
||||||
|
|
||||||
|
/// No description provided for @saveErrorDetail.
|
||||||
|
///
|
||||||
|
/// In de, this message translates to:
|
||||||
|
/// **'Speichern fehlgeschlagen ({detail}). Bitte versuche es erneut.'**
|
||||||
|
String saveErrorDetail(String detail);
|
||||||
}
|
}
|
||||||
|
|
||||||
class _AppLocalizationsDelegate
|
class _AppLocalizationsDelegate
|
||||||
|
|
|
||||||
|
|
@ -444,4 +444,9 @@ class AppLocalizationsDe extends AppLocalizations {
|
||||||
|
|
||||||
@override
|
@override
|
||||||
String get saveError => 'Speichern fehlgeschlagen. Bitte versuche es erneut.';
|
String get saveError => 'Speichern fehlgeschlagen. Bitte versuche es erneut.';
|
||||||
|
|
||||||
|
@override
|
||||||
|
String saveErrorDetail(String detail) {
|
||||||
|
return 'Speichern fehlgeschlagen ($detail). Bitte versuche es erneut.';
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
|
||||||
Loading…
Reference in a new issue