import 'package:flutter/material.dart'; import 'package:firebase_auth/firebase_auth.dart'; class ResetPasswordPage extends StatefulWidget { final String email; final String actionCode; const ResetPasswordPage({ super.key, required this.email, required this.actionCode, }); @override ResetPasswordPageState createState() => ResetPasswordPageState(); } class ResetPasswordPageState extends State { final _formKey = GlobalKey(); final _passwordController = TextEditingController(); final _confirmPasswordController = TextEditingController(); bool _isLoading = false; String? _errorMessage; @override void dispose() { _passwordController.dispose(); _confirmPasswordController.dispose(); super.dispose(); } Future _resetPassword() async { if (!_formKey.currentState!.validate()) return; setState(() { _isLoading = true; _errorMessage = null; }); try { // Vérifier le code d'action await FirebaseAuth.instance.verifyPasswordResetCode(widget.actionCode); // Réinitialiser le mot de passe await FirebaseAuth.instance.confirmPasswordReset( code: widget.actionCode, newPassword: _passwordController.text, ); // Connecter l'utilisateur automatiquement await FirebaseAuth.instance.signInWithEmailAndPassword( email: widget.email, password: _passwordController.text, ); if (mounted) { Navigator.of(context).pushReplacementNamed('/home'); } } catch (e) { setState(() { _errorMessage = 'Une erreur est survenue. Veuillez réessayer.'; }); } finally { if (mounted) { setState(() { _isLoading = false; }); } } } @override Widget build(BuildContext context) { return Scaffold( appBar: AppBar( title: const Text('Créer votre mot de passe'), ), body: Padding( padding: const EdgeInsets.all(16.0), child: Form( key: _formKey, child: Column( mainAxisAlignment: MainAxisAlignment.center, crossAxisAlignment: CrossAxisAlignment.stretch, children: [ Text( 'Bienvenue ! Veuillez créer votre mot de passe pour continuer.', style: Theme.of(context).textTheme.titleMedium, textAlign: TextAlign.center, ), const SizedBox(height: 24), TextFormField( controller: _passwordController, decoration: const InputDecoration( labelText: 'Nouveau mot de passe', border: OutlineInputBorder(), ), obscureText: true, validator: (value) { if (value == null || value.isEmpty) { return 'Veuillez entrer un mot de passe'; } if (value.length < 6) { return 'Le mot de passe doit contenir au moins 6 caractères'; } return null; }, ), const SizedBox(height: 16), TextFormField( controller: _confirmPasswordController, decoration: const InputDecoration( labelText: 'Confirmer le mot de passe', border: OutlineInputBorder(), ), obscureText: true, validator: (value) { if (value != _passwordController.text) { return 'Les mots de passe ne correspondent pas'; } return null; }, ), if (_errorMessage != null) ...[ const SizedBox(height: 16), Text( _errorMessage!, style: TextStyle( color: Theme.of(context).colorScheme.error, ), textAlign: TextAlign.center, ), ], const SizedBox(height: 24), ElevatedButton( onPressed: _isLoading ? null : _resetPassword, child: _isLoading ? const CircularProgressIndicator() : const Text('Créer le mot de passe'), ), ], ), ), ), ); } }