import 'package:flutter/material.dart'; import 'package:email_validator/email_validator.dart'; import '../services/auth_service.dart'; import '../utils/error_handler.dart'; class PasswordResetScreen extends StatefulWidget { const PasswordResetScreen({super.key}); @override State createState() => _PasswordResetScreenState(); } class _PasswordResetScreenState extends State { final _formKey = GlobalKey(); final _emailController = TextEditingController(); bool _isLoading = false; bool _emailSent = false; @override void dispose() { _emailController.dispose(); super.dispose(); } Future _handlePasswordReset() async { if (!_formKey.currentState!.validate()) { return; } setState(() { _isLoading = true; }); try { final authService = AuthService(); final result = await authService.requestPasswordReset( _emailController.text.trim(), ); if (mounted) { setState(() { _isLoading = false; _emailSent = result['success'] == true; }); ScaffoldMessenger.of(context).showSnackBar( SnackBar( content: Text(result['message'] ?? 'E-Mail wurde gesendet'), backgroundColor: result['success'] == true ? Colors.green : Colors.orange, ), ); } } catch (e) { if (mounted) { setState(() { _isLoading = false; }); ErrorHandler.showError(context, e); } } } @override Widget build(BuildContext context) { return Scaffold( appBar: AppBar( title: const Text('Passwort zurücksetzen'), ), body: SafeArea( child: SingleChildScrollView( padding: const EdgeInsets.all(24), child: Form( key: _formKey, child: Column( crossAxisAlignment: CrossAxisAlignment.stretch, children: [ Icon( Icons.lock_reset, size: 80, color: Theme.of(context).primaryColor, ), const SizedBox(height: 16), Text( _emailSent ? 'E-Mail gesendet' : 'Passwort zurücksetzen', style: Theme.of(context).textTheme.headlineSmall?.copyWith( fontWeight: FontWeight.bold, ), textAlign: TextAlign.center, ), const SizedBox(height: 8), Text( _emailSent ? 'Wir haben dir eine E-Mail mit Anweisungen zum Zurücksetzen deines Passworts gesendet.' : 'Gib deine E-Mail-Adresse ein und wir senden dir einen Link zum Zurücksetzen deines Passworts.', style: Theme.of(context).textTheme.bodyMedium?.copyWith( color: Colors.grey[600], ), textAlign: TextAlign.center, ), const SizedBox(height: 32), if (!_emailSent) ...[ TextFormField( controller: _emailController, decoration: InputDecoration( labelText: 'E-Mail', prefixIcon: const Icon(Icons.email), border: OutlineInputBorder( borderRadius: BorderRadius.circular(8), ), ), keyboardType: TextInputType.emailAddress, textInputAction: TextInputAction.done, onFieldSubmitted: (_) => _handlePasswordReset(), validator: (value) { if (value == null || value.isEmpty) { return 'Bitte gib deine E-Mail ein'; } if (!EmailValidator.validate(value)) { return 'Bitte gib eine gültige E-Mail ein'; } return null; }, ), const SizedBox(height: 24), ElevatedButton( onPressed: _isLoading ? null : _handlePasswordReset, style: ElevatedButton.styleFrom( backgroundColor: const Color(0xFF8B6F47), foregroundColor: Colors.white, padding: const EdgeInsets.symmetric(vertical: 16), shape: RoundedRectangleBorder( borderRadius: BorderRadius.circular(8), ), ), child: _isLoading ? const SizedBox( height: 20, width: 20, child: CircularProgressIndicator( strokeWidth: 2, valueColor: AlwaysStoppedAnimation(Colors.white), ), ) : const Text( 'Reset-Link senden', style: TextStyle(fontSize: 16), ), ), ] else ...[ Icon( Icons.check_circle, size: 64, color: Colors.green, ), const SizedBox(height: 16), ElevatedButton( onPressed: () { Navigator.of(context).pop(); }, child: const Text('Zurück zum Login'), ), ], ], ), ), ), ), ); } }