From c5374efbd67c7fe15aea142cdf2084e67a40d298 Mon Sep 17 00:00:00 2001 From: patrick Date: Thu, 10 Sep 2026 13:43:19 +0200 Subject: [PATCH] =?UTF-8?q?fix:=20QR-Scan-Fehler=20sichtbar=20machen=20(Di?= =?UTF-8?q?agnose=20f=C3=BCr=20"An=20unexpected=20error=20occurred")?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit mobile_scanners Default-errorBuilder zeigt nur die generische Meldung ohne Details. Eigener errorBuilder zeigt jetzt errorCode + errorDetails.message an, damit sich das reale Problem auf dem Tablet überhaupt einordnen lässt (z.B. Kamera-Berechtigung verweigert, Kamera nicht verfügbar, o.ä.). Zusätzlich Fallback-Button "Zurück – manuell eintragen". v0.1.6+7. Co-Authored-By: Claude Sonnet 5 Claude-Session: https://claude.ai/code/session_01Dzdm3EWeNdYFUuXFRJryA1 --- lib/app_version.dart | 2 +- lib/screens/qr_enrollment_scan_screen.dart | 35 +++++++++++++++++++++- pubspec.yaml | 2 +- 3 files changed, 36 insertions(+), 3 deletions(-) diff --git a/lib/app_version.dart b/lib/app_version.dart index 70c271a..d55851c 100644 --- a/lib/app_version.dart +++ b/lib/app_version.dart @@ -1,3 +1,3 @@ /// Manuell mit pubspec.yaml synchron halten (siehe timemaster-mobile, /// gleiche Konvention – kein package_info_plus während aktiver Feldtests). -const String kAppVersion = '0.1.5+6'; +const String kAppVersion = '0.1.6+7'; diff --git a/lib/screens/qr_enrollment_scan_screen.dart b/lib/screens/qr_enrollment_scan_screen.dart index 411c3af..da15cf9 100644 --- a/lib/screens/qr_enrollment_scan_screen.dart +++ b/lib/screens/qr_enrollment_scan_screen.dart @@ -48,7 +48,40 @@ class _QrEnrollmentScanScreenState extends State { appBar: AppBar(title: const Text('QR-Code scannen')), body: Stack( children: [ - MobileScanner(controller: _controller, onDetect: _onDetect), + MobileScanner( + controller: _controller, + onDetect: _onDetect, + errorBuilder: (context, error, child) { + // Default-errorBuilder zeigt nur "An unexpected error occurred" + // ohne Details – hier den echten MobileScannerErrorCode + + // Details anzeigen, damit sich das Problem auf dem Gerät + // überhaupt diagnostizieren lässt. + return Container( + color: Colors.black, + padding: const EdgeInsets.all(24), + child: Center( + child: Column( + mainAxisSize: MainAxisSize.min, + children: [ + const Icon(Icons.error_outline, color: Colors.red, size: 48), + const SizedBox(height: 16), + Text('Kamera-Fehler: ${error.errorCode}', + style: const TextStyle(color: Colors.white, fontWeight: FontWeight.bold)), + const SizedBox(height: 8), + Text('${error.errorDetails?.message ?? "keine Details"}', + style: const TextStyle(color: Colors.white70, fontSize: 12), + textAlign: TextAlign.center), + const SizedBox(height: 24), + OutlinedButton( + onPressed: () => Navigator.of(context).pop(), + child: const Text('Zurück – manuell eintragen', style: TextStyle(color: Colors.white)), + ), + ], + ), + ), + ); + }, + ), if (_error != null) Positioned( left: 16, diff --git a/pubspec.yaml b/pubspec.yaml index 36f8bd0..210647b 100644 --- a/pubspec.yaml +++ b/pubspec.yaml @@ -1,7 +1,7 @@ name: timemaster_kiosk description: TimeMaster Kiosk – Stempeluhr für Android-Tablets hinter VPN publish_to: 'none' -version: 0.1.5+6 +version: 0.1.6+7 environment: sdk: '>=3.3.0 <4.0.0'