Backend liefert start_time/break_start als "HH:MM:SS" oder "HH:MM:SS.ffffff"
(datetime.now(timezone.utc).time() strippt Mikrosekunden nicht) – der
Live-Timer parste den Sekunden-Anteil naiv mit int.parse, was bei
vorhandenen Mikrosekunden mit "FormatException: Invalid radix-10 number"
crashte. Zusätzlich war die Zeit fälschlich als lokale Zeit behandelt
worden statt als UTC (Server sendet UTC) – Dauer wäre um die
Zeitzonendifferenz verfälscht gewesen. Beides gefixt: Sekunden-Anteil vor
dem Punkt abschneiden, Vergleich komplett in UTC. v0.1.4+5.
Co-Authored-By: Claude Sonnet 5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01Dzdm3EWeNdYFUuXFRJryA1
E-Mail wird nach erfolgreichem Login immer lokal gespeichert (Vorausfüllen).
Passwort wird nur gespeichert, wenn das Gerät Biometrie/PIN unterstützt –
Zugriff darauf ist an den Biometrie-Prompt gekoppelt ("Mit Biometrie
anmelden"-Button), nicht nur an Secure-Storage-Verschlüsselung allein.
Geräte ohne Biometrie sehen nur das vorausgefüllte E-Mail-Feld. v0.1.3+4.
Co-Authored-By: Claude Sonnet 5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01Dzdm3EWeNdYFUuXFRJryA1
Ersetzt NICHT den Erstlogin (Backend kennt keine Biometrie) – schaltet nur
den lokal gespeicherten Access-Token beim App-Start bzw. beim Zurückkehren
aus dem Hintergrund frei. Geräte ohne Biometrie/PIN bleiben unverändert
(kein Lock-Screen). MainActivity auf FlutterFragmentActivity umgestellt
(Voraussetzung für local_auth), USE_BIOMETRIC-Permission ergänzt. v0.1.2+3.
Co-Authored-By: Claude Sonnet 5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01Dzdm3EWeNdYFUuXFRJryA1
Release-Build zeigte bei unbehandelten Exceptions nur eine leere Fläche
(Flutter-Default-ErrorWidget ohne Text im Release-Modus). Jetzt: eigenes
ErrorWidget.builder (roter Screen mit Fehlertext + Version), runZonedGuarded
in main(), generische catch-Blöcke in HomeScreen (bisher nur DioException
gefangen). App-Version v0.1.1+2 sichtbar in Login-/Home-AppBar, damit
Feldberichte einem Build zuzuordnen sind.
Co-Authored-By: Claude Sonnet 5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01Dzdm3EWeNdYFUuXFRJryA1
Employee-only App gegen bestehende Backend-API: Login inkl. TOTP-Schritt,
Ein-/Ausstempeln, Pause, Status "heute". Refresh-Token läuft nur als
HttpOnly-Cookie (Backend gibt ihn nie im Body zurück) → persistente
Cookie-Jar statt Secure-Storage-Refresh-Token. android/-Projektordner via
flutter create auf root@192.168.1.236 generiert, INTERNET-Permission
nachgetragen. Ungetestet auf echtem Gerät.
Co-Authored-By: Claude Sonnet 5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01Dzdm3EWeNdYFUuXFRJryA1