CI / backend-tests (push) Successful in 54s
React/Vite-PWA (frontend/):
- Login, Objektliste (Prompt 11 Screen 1), Kontroll-Screen (Screens 2-6 kompakt:
Start/Objekt-Sperre-Übernahme, Positionserfassung, Abschluss/Abbruch)
- Offline-Härtung (Prompt 17): IndexedDB-Queue (src/offline/queue.ts) puffert
Positions-PUTs lokal, automatische Übertragung bei Reconnect + periodischem
Sync-Versuch, Statusanzeige je Position (nicht gespeichert/wird übertragen/
gespeichert/Fehler), Abschluss-Button bleibt gesperrt bis alles gespeichert
- Nutzt aus, dass PUT /kontrollen/{id}/positionen/{material_id} backend-seitig
idempotent ist (Upsert) - Queue kann beliebig oft retryen ohne Duplikate
- Service Worker via vite-plugin-pwa für App-Shell-Caching (Start im Feld ohne
Cold-Load); PWA-Icons als TODO vermerkt (noch keine echten Bilddateien)
- Client-Fehler (4xx) werden nicht automatisch wiederholt, nur Netzwerkfehler
Flutter-Android-Grundgerüst (flutter_app/), auf Nutzerwunsch parallel begonnen:
- Gleiche API als zweiter Client (Prompt 19 API-first), Login/Objektliste/
Kontroll-Screen als Dart-Äquivalent zur PWA
- Bewusst OHNE Offline-Queue in dieser ersten Fassung (siehe flutter_app/README.md)
- Plattform-Ordner (android/, ios/) nicht von Hand erzeugt - müssen auf dem
Zielsystem per `flutter create .` nachgezogen werden, sonst zu fehleranfällig
ohne Testlauf
Offen: Playwright-E2E (Testphase 4), Praktiker-Session, PWA-Icons, Flutter-
Offline-Queue - brauchen laufendes Deployment bzw. sind kein reiner Code-Schritt.
Co-Authored-By: Claude Sonnet 5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01L85hmKbvX7Cqkq47KnQhFt
46 lines
1.3 KiB
Dart
46 lines
1.3 KiB
Dart
import 'package:flutter/material.dart';
|
|
|
|
import 'api/api_client.dart';
|
|
import 'screens/login_screen.dart';
|
|
import 'screens/objekt_list_screen.dart';
|
|
|
|
// API-Basis-URL fest im Code statt .env: Flutter-Umgebungsvariablen brauchen
|
|
// --dart-define beim Build, unpraktisch für den ersten Wurf. Vor Produktivbetrieb
|
|
// hier auf die echte Backend-Adresse setzen bzw. auf --dart-define umstellen.
|
|
const String kApiBaseUrl = 'http://192.168.1.238/api/v1';
|
|
|
|
void main() {
|
|
runApp(const MabeaApp());
|
|
}
|
|
|
|
class MabeaApp extends StatefulWidget {
|
|
const MabeaApp({super.key});
|
|
|
|
@override
|
|
State<MabeaApp> createState() => _MabeaAppState();
|
|
}
|
|
|
|
class _MabeaAppState extends State<MabeaApp> {
|
|
final _apiClient = ApiClient(baseUrl: kApiBaseUrl);
|
|
bool _bereit = false;
|
|
|
|
@override
|
|
void initState() {
|
|
super.initState();
|
|
_apiClient.ladeToken().then((_) => setState(() => _bereit = true));
|
|
}
|
|
|
|
@override
|
|
Widget build(BuildContext context) {
|
|
return MaterialApp(
|
|
title: 'MABEA',
|
|
theme: ThemeData(colorSchemeSeed: const Color(0xFF0B5394), useMaterial3: true),
|
|
home: !_bereit
|
|
? const Scaffold(body: Center(child: CircularProgressIndicator()))
|
|
: _apiClient.istEingeloggt
|
|
? ObjektListScreen(apiClient: _apiClient)
|
|
: LoginScreen(apiClient: _apiClient),
|
|
);
|
|
}
|
|
}
|