From 5b8a99a26eea5105e4ab190cc13ba1913e6ccf7d Mon Sep 17 00:00:00 2001 From: cschlaefke Date: Thu, 23 Jul 2026 21:40:29 +0200 Subject: [PATCH] Diagnose: Speicher-Fehler zeigt jetzt den Firebase-Fehlercode an MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit 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 --- .../plants/presentation/plant_form_screen.dart | 12 ++++++++++-- lib/l10n/app_de.arb | 8 +++++++- lib/l10n/generated/app_localizations.dart | 6 ++++++ lib/l10n/generated/app_localizations_de.dart | 5 +++++ 4 files changed, 28 insertions(+), 3 deletions(-) diff --git a/lib/features/plants/presentation/plant_form_screen.dart b/lib/features/plants/presentation/plant_form_screen.dart index 28b590f..6ac025c 100644 --- a/lib/features/plants/presentation/plant_form_screen.dart +++ b/lib/features/plants/presentation/plant_form_screen.dart @@ -1,5 +1,6 @@ import 'dart:typed_data'; +import 'package:firebase_core/firebase_core.dart'; import 'package:flutter/material.dart'; import 'package:flutter_riverpod/flutter_riverpod.dart'; import 'package:go_router/go_router.dart'; @@ -151,11 +152,18 @@ class _PlantFormScreenState extends ConsumerState { )); } 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) { ScaffoldMessenger.of(context) ..hideCurrentSnackBar() - ..showSnackBar(SnackBar(content: Text(l10n.saveError))); + ..showSnackBar(SnackBar(content: Text(l10n.saveErrorDetail(detail)))); } } finally { if (mounted) setState(() => _saving = false); diff --git a/lib/l10n/app_de.arb b/lib/l10n/app_de.arb index 4514ecf..6dc1b1e 100644 --- a/lib/l10n/app_de.arb +++ b/lib/l10n/app_de.arb @@ -225,5 +225,11 @@ } }, "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" } + } + } } diff --git a/lib/l10n/generated/app_localizations.dart b/lib/l10n/generated/app_localizations.dart index 3e494cf..f075886 100644 --- a/lib/l10n/generated/app_localizations.dart +++ b/lib/l10n/generated/app_localizations.dart @@ -819,6 +819,12 @@ abstract class AppLocalizations { /// In de, this message translates to: /// **'Speichern fehlgeschlagen. Bitte versuche es erneut.'** 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 diff --git a/lib/l10n/generated/app_localizations_de.dart b/lib/l10n/generated/app_localizations_de.dart index 5744420..869e1ad 100644 --- a/lib/l10n/generated/app_localizations_de.dart +++ b/lib/l10n/generated/app_localizations_de.dart @@ -444,4 +444,9 @@ class AppLocalizationsDe extends AppLocalizations { @override String get saveError => 'Speichern fehlgeschlagen. Bitte versuche es erneut.'; + + @override + String saveErrorDetail(String detail) { + return 'Speichern fehlgeschlagen ($detail). Bitte versuche es erneut.'; + } }