import 'package:flutter/material.dart'; import '../api/api_client.dart'; import 'objekt_list_screen.dart'; class LoginScreen extends StatefulWidget { const LoginScreen({super.key, required this.apiClient}); final ApiClient apiClient; @override State createState() => _LoginScreenState(); } class _LoginScreenState extends State { final _loginController = TextEditingController(); final _passwortController = TextEditingController(); String? _fehler; bool _ladeVorgang = false; Future _anmelden() async { setState(() { _fehler = null; _ladeVorgang = true; }); try { await widget.apiClient.login(_loginController.text, _passwortController.text); if (!mounted) return; Navigator.of(context).pushReplacement( MaterialPageRoute(builder: (_) => ObjektListScreen(apiClient: widget.apiClient)), ); } catch (_) { setState(() => _fehler = 'Login oder Passwort falsch'); } finally { if (mounted) setState(() => _ladeVorgang = false); } } @override Widget build(BuildContext context) { return Scaffold( body: Center( child: Padding( padding: const EdgeInsets.all(24), child: Column( mainAxisSize: MainAxisSize.min, crossAxisAlignment: CrossAxisAlignment.stretch, children: [ const Text('MABEA', style: TextStyle(fontSize: 32, fontWeight: FontWeight.bold)), const SizedBox(height: 24), TextField( controller: _loginController, decoration: const InputDecoration(labelText: 'Login'), ), const SizedBox(height: 12), TextField( controller: _passwortController, decoration: const InputDecoration(labelText: 'Passwort'), obscureText: true, ), if (_fehler != null) ...[ const SizedBox(height: 12), Text(_fehler!, style: const TextStyle(color: Colors.red)), ], const SizedBox(height: 24), FilledButton( onPressed: _ladeVorgang ? null : _anmelden, child: Text(_ladeVorgang ? 'Wird geprüft…' : 'Anmelden'), ), ], ), ), ), ); } }