Refactorisation complète du parcours d'inscription des parents pour utiliser Provider au lieu du passage de données par paramètres de navigation. Modifications principales : - Utilisation de Provider pour partager UserRegistrationData entre les étapes - Simplification du routeur (suppression des paramètres) - Amélioration de la persistance des données entre les étapes - Meilleure expérience utilisateur lors de la navigation Fichiers modifiés : - models/user_registration_data.dart : Modèle avec ChangeNotifier - screens/auth/parent_register_step1-5_screen.dart : Intégration Provider - navigation/app_router.dart : Simplification du routing - main.dart : Configuration du Provider - login_screen.dart : Ajout navigation vers inscription - register_choice_screen.dart : Navigation vers parcours parent/AM - utils/data_generator.dart : Génération de données de test Refs: #38 (Étape 3 Enfants), #39 (Étapes 4-6 Finalisation)
This commit is contained in:
@@ -5,6 +5,8 @@ import '../../models/user_registration_data.dart'; // Import du modèle de donn
|
||||
import '../../utils/data_generator.dart'; // Import du générateur de données
|
||||
import '../../widgets/custom_app_text_field.dart'; // Import du widget CustomAppTextField
|
||||
import '../../models/card_assets.dart'; // Import des enums de cartes
|
||||
import 'package:go_router/go_router.dart';
|
||||
import 'package:provider/provider.dart'; // Importer Provider
|
||||
|
||||
class ParentRegisterStep1Screen extends StatefulWidget {
|
||||
const ParentRegisterStep1Screen({super.key});
|
||||
@@ -15,31 +17,44 @@ class ParentRegisterStep1Screen extends StatefulWidget {
|
||||
|
||||
class _ParentRegisterStep1ScreenState extends State<ParentRegisterStep1Screen> {
|
||||
final _formKey = GlobalKey<FormState>();
|
||||
late UserRegistrationData _registrationData;
|
||||
// late UserRegistrationData _registrationData; // Supprimé, on utilisera le Provider
|
||||
|
||||
// Contrôleurs pour les champs (restauration CP et Ville)
|
||||
// Contrôleurs pour les champs
|
||||
final _lastNameController = TextEditingController();
|
||||
final _firstNameController = TextEditingController();
|
||||
final _phoneController = TextEditingController();
|
||||
final _emailController = TextEditingController();
|
||||
final _passwordController = TextEditingController();
|
||||
final _confirmPasswordController = TextEditingController();
|
||||
final _addressController = TextEditingController(); // Rue seule
|
||||
final _postalCodeController = TextEditingController(); // Restauré
|
||||
final _cityController = TextEditingController(); // Restauré
|
||||
final _addressController = TextEditingController();
|
||||
final _postalCodeController = TextEditingController();
|
||||
final _cityController = TextEditingController();
|
||||
|
||||
@override
|
||||
void initState() {
|
||||
super.initState();
|
||||
_registrationData = UserRegistrationData();
|
||||
_generateAndFillData();
|
||||
// Récupérer les données existantes du Provider pour pré-remplir si l'utilisateur revient
|
||||
final registrationDataFromProvider = Provider.of<UserRegistrationData>(context, listen: false);
|
||||
_firstNameController.text = registrationDataFromProvider.parent1.firstName;
|
||||
_lastNameController.text = registrationDataFromProvider.parent1.lastName;
|
||||
_phoneController.text = registrationDataFromProvider.parent1.phone;
|
||||
_emailController.text = registrationDataFromProvider.parent1.email;
|
||||
_passwordController.text = registrationDataFromProvider.parent1.password;
|
||||
_confirmPasswordController.text = registrationDataFromProvider.parent1.password; // Ou laisser vide pour reconfirmation
|
||||
_addressController.text = registrationDataFromProvider.parent1.address;
|
||||
_postalCodeController.text = registrationDataFromProvider.parent1.postalCode;
|
||||
_cityController.text = registrationDataFromProvider.parent1.city;
|
||||
|
||||
// Si les champs sont vides (première visite), générer des données
|
||||
if (registrationDataFromProvider.parent1.firstName.isEmpty) {
|
||||
_generateAndFillData();
|
||||
}
|
||||
}
|
||||
|
||||
void _generateAndFillData() {
|
||||
final String genFirstName = DataGenerator.firstName();
|
||||
final String genLastName = DataGenerator.lastName();
|
||||
|
||||
// Utilisation des méthodes publiques de DataGenerator
|
||||
_addressController.text = DataGenerator.address();
|
||||
_postalCodeController.text = DataGenerator.postalCode();
|
||||
_cityController.text = DataGenerator.city();
|
||||
@@ -66,6 +81,25 @@ class _ParentRegisterStep1ScreenState extends State<ParentRegisterStep1Screen> {
|
||||
super.dispose();
|
||||
}
|
||||
|
||||
void _submitForm() {
|
||||
if (_formKey.currentState?.validate() ?? false) {
|
||||
final registrationData = Provider.of<UserRegistrationData>(context, listen: false);
|
||||
registrationData.updateParent1(
|
||||
ParentData(
|
||||
firstName: _firstNameController.text,
|
||||
lastName: _lastNameController.text,
|
||||
address: _addressController.text,
|
||||
postalCode: _postalCodeController.text,
|
||||
city: _cityController.text,
|
||||
phone: _phoneController.text,
|
||||
email: _emailController.text,
|
||||
password: _passwordController.text, // Sauvegarder le mot de passe
|
||||
)
|
||||
);
|
||||
context.go('/parent-register-step2');
|
||||
}
|
||||
}
|
||||
|
||||
@override
|
||||
Widget build(BuildContext context) {
|
||||
final screenSize = MediaQuery.of(context).size;
|
||||
@@ -188,7 +222,13 @@ class _ParentRegisterStep1ScreenState extends State<ParentRegisterStep1Screen> {
|
||||
transform: Matrix4.rotationY(math.pi), // Inverse horizontalement
|
||||
child: Image.asset('assets/images/chevron_right.png', height: 40),
|
||||
),
|
||||
onPressed: () => Navigator.pop(context), // Retour à l'écran de choix
|
||||
onPressed: () {
|
||||
if (context.canPop()) {
|
||||
context.pop();
|
||||
} else {
|
||||
context.go('/register-choice');
|
||||
}
|
||||
},
|
||||
tooltip: 'Retour',
|
||||
),
|
||||
),
|
||||
@@ -199,23 +239,7 @@ class _ParentRegisterStep1ScreenState extends State<ParentRegisterStep1Screen> {
|
||||
right: 40,
|
||||
child: IconButton(
|
||||
icon: Image.asset('assets/images/chevron_right.png', height: 40),
|
||||
onPressed: () {
|
||||
if (_formKey.currentState?.validate() ?? false) {
|
||||
_registrationData.updateParent1(
|
||||
ParentData(
|
||||
firstName: _firstNameController.text,
|
||||
lastName: _lastNameController.text,
|
||||
address: _addressController.text, // Rue
|
||||
postalCode: _postalCodeController.text, // Ajout
|
||||
city: _cityController.text, // Ajout
|
||||
phone: _phoneController.text,
|
||||
email: _emailController.text,
|
||||
password: _passwordController.text,
|
||||
)
|
||||
);
|
||||
Navigator.pushNamed(context, '/parent-register/step2', arguments: _registrationData);
|
||||
}
|
||||
},
|
||||
onPressed: _submitForm, // Appel de la fonction de soumission
|
||||
tooltip: 'Suivant',
|
||||
),
|
||||
),
|
||||
|
||||
Reference in New Issue
Block a user