import 'package:flutter/material.dart'; import 'package:go_router/go_router.dart'; import '../../services/auth_service.dart'; class RegisterScreen extends StatefulWidget { const RegisterScreen({super.key}); @override State createState() => _RegisterScreenState(); } class _RegisterScreenState extends State { final _formKey = GlobalKey(); final _emailController = TextEditingController(); final _passwordController = TextEditingController(); final _firstNameController = TextEditingController(); final _lastNameController = TextEditingController(); bool _isLoading = false; @override void dispose() { _emailController.dispose(); _passwordController.dispose(); _firstNameController.dispose(); _lastNameController.dispose(); super.dispose(); } Future _register() async { if (_formKey.currentState!.validate()) { setState(() => _isLoading = true); try { await AuthService.register( email: _emailController.text, password: _passwordController.text, firstName: _firstNameController.text, lastName: _lastNameController.text, role: 'user', ); if (mounted) { context.go('/login'); } } catch (e) { if (mounted) { ScaffoldMessenger.of(context).showSnackBar( SnackBar( content: Text('Erreur lors de l\'inscription: $e'), backgroundColor: Colors.red, ), ); } } finally { if (mounted) { setState(() => _isLoading = false); } } } } @override Widget build(BuildContext context) { return Scaffold( appBar: AppBar( title: const Text('Inscription'), ), body: Center( child: SingleChildScrollView( padding: const EdgeInsets.all(16.0), child: Form( key: _formKey, child: Column( mainAxisAlignment: MainAxisAlignment.center, children: [ TextFormField( controller: _firstNameController, decoration: const InputDecoration( labelText: 'Prénom', border: OutlineInputBorder(), ), validator: (value) { if (value == null || value.isEmpty) { return 'Veuillez entrer votre prénom'; } return null; }, ), const SizedBox(height: 16), TextFormField( controller: _lastNameController, decoration: const InputDecoration( labelText: 'Nom', border: OutlineInputBorder(), ), validator: (value) { if (value == null || value.isEmpty) { return 'Veuillez entrer votre nom'; } return null; }, ), const SizedBox(height: 16), TextFormField( controller: _emailController, decoration: const InputDecoration( labelText: 'Email', border: OutlineInputBorder(), ), keyboardType: TextInputType.emailAddress, validator: (value) { if (value == null || value.isEmpty) { return 'Veuillez entrer votre email'; } if (!value.contains('@')) { return 'Veuillez entrer un email valide'; } return null; }, ), const SizedBox(height: 16), TextFormField( controller: _passwordController, decoration: const InputDecoration( labelText: '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: 24), ElevatedButton( onPressed: _isLoading ? null : _register, child: _isLoading ? const CircularProgressIndicator() : const Text('S\'inscrire'), ), const SizedBox(height: 16), TextButton( onPressed: () => context.go('/login'), child: const Text('Déjà un compte ? Se connecter'), ), ], ), ), ), ), ); } }