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:
cschlaefke 2026-07-23 21:40:29 +02:00
parent 5ed3a68e45
commit 5b8a99a26e
4 changed files with 28 additions and 3 deletions

View file

@ -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);

View file

@ -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" }
}
}
} }

View file

@ -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

View file

@ -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.';
}
} }