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,19 +5,22 @@ import '../../models/user_registration_data.dart'; // Import du modèle
|
||||
import '../../utils/data_generator.dart'; // Import du générateur
|
||||
import '../../widgets/custom_app_text_field.dart'; // Import du widget
|
||||
import '../../models/card_assets.dart'; // Import des enums de cartes
|
||||
import 'package:provider/provider.dart';
|
||||
import 'package:go_router/go_router.dart'; // Importer GoRouter
|
||||
|
||||
class ParentRegisterStep2Screen extends StatefulWidget {
|
||||
final UserRegistrationData registrationData; // Accepte les données de l'étape 1
|
||||
// final UserRegistrationData registrationData; // Supprimé
|
||||
|
||||
const ParentRegisterStep2Screen({super.key, required this.registrationData});
|
||||
const ParentRegisterStep2Screen({super.key /*, required this.registrationData */}); // Modifié
|
||||
|
||||
@override
|
||||
State<ParentRegisterStep2Screen> createState() => _ParentRegisterStep2ScreenState();
|
||||
_ParentRegisterStep2ScreenState createState() =>
|
||||
_ParentRegisterStep2ScreenState();
|
||||
}
|
||||
|
||||
class _ParentRegisterStep2ScreenState extends State<ParentRegisterStep2Screen> {
|
||||
final _formKey = GlobalKey<FormState>();
|
||||
late UserRegistrationData _registrationData; // Copie locale pour modification
|
||||
// late UserRegistrationData _registrationData; // Supprimé
|
||||
|
||||
bool _addParent2 = true; // Pour le test, on ajoute toujours le parent 2
|
||||
bool _sameAddressAsParent1 = false; // Peut être généré aléatoirement aussi
|
||||
@@ -36,13 +39,19 @@ class _ParentRegisterStep2ScreenState extends State<ParentRegisterStep2Screen> {
|
||||
@override
|
||||
void initState() {
|
||||
super.initState();
|
||||
_registrationData = widget.registrationData; // Récupère les données de l'étape 1
|
||||
// On ne récupère plus _registrationData ici
|
||||
// Mais on peut récupérer les données initiales pour les contrôleurs si nécessaire
|
||||
final initialData = Provider.of<UserRegistrationData>(context, listen: false);
|
||||
_addParent2 = initialData.parent2 != null;
|
||||
if (_addParent2) {
|
||||
_generateAndFillParent2Data();
|
||||
_fillParent2Data(initialData.parent2!, initialData.parent1);
|
||||
} else {
|
||||
_generateAndFillParent2Data(initialData.parent1); // Ou générer si pas de données
|
||||
}
|
||||
}
|
||||
|
||||
void _generateAndFillParent2Data() {
|
||||
// Modifié pour prendre les données parent1
|
||||
void _generateAndFillParent2Data(ParentData parent1Data) {
|
||||
final String genFirstName = DataGenerator.firstName();
|
||||
final String genLastName = DataGenerator.lastName();
|
||||
_firstNameController.text = genFirstName;
|
||||
@@ -60,12 +69,30 @@ class _ParentRegisterStep2ScreenState extends State<ParentRegisterStep2Screen> {
|
||||
_cityController.text = DataGenerator.city();
|
||||
} else {
|
||||
// Vider les champs si même adresse (seront désactivés)
|
||||
_addressController.clear();
|
||||
_postalCodeController.clear();
|
||||
_cityController.clear();
|
||||
_addressController.text = parent1Data.address;
|
||||
_postalCodeController.text = parent1Data.postalCode;
|
||||
_cityController.text = parent1Data.city;
|
||||
}
|
||||
}
|
||||
|
||||
// Nouvelle fonction pour remplir depuis les données existantes
|
||||
void _fillParent2Data(ParentData parent2Data, ParentData parent1Data) {
|
||||
_firstNameController.text = parent2Data.firstName;
|
||||
_lastNameController.text = parent2Data.lastName;
|
||||
_phoneController.text = parent2Data.phone;
|
||||
_emailController.text = parent2Data.email;
|
||||
_passwordController.text = parent2Data.password; // Attention à la sécurité
|
||||
_confirmPasswordController.text = parent2Data.password;
|
||||
|
||||
_sameAddressAsParent1 = (parent2Data.address == parent1Data.address &&
|
||||
parent2Data.postalCode == parent1Data.postalCode &&
|
||||
parent2Data.city == parent1Data.city);
|
||||
|
||||
_addressController.text = parent2Data.address;
|
||||
_postalCodeController.text = parent2Data.postalCode;
|
||||
_cityController.text = parent2Data.city;
|
||||
}
|
||||
|
||||
@override
|
||||
void dispose() {
|
||||
_lastNameController.dispose();
|
||||
@@ -85,6 +112,8 @@ class _ParentRegisterStep2ScreenState extends State<ParentRegisterStep2Screen> {
|
||||
|
||||
@override
|
||||
Widget build(BuildContext context) {
|
||||
final registrationData = Provider.of<UserRegistrationData>(context, listen: false);
|
||||
final parent1Data = registrationData.parent1;
|
||||
final screenSize = MediaQuery.of(context).size;
|
||||
|
||||
return Scaffold(
|
||||
@@ -129,7 +158,7 @@ class _ParentRegisterStep2ScreenState extends State<ParentRegisterStep2Screen> {
|
||||
const Spacer(),
|
||||
Switch(value: _addParent2, onChanged: (val) => setState(() {
|
||||
_addParent2 = val ?? false;
|
||||
if (_addParent2) _generateAndFillParent2Data(); else _clearParent2Fields();
|
||||
if (_addParent2) _generateAndFillParent2Data(parent1Data); else _clearParent2Fields();
|
||||
}), activeColor: Theme.of(context).primaryColor),
|
||||
]),
|
||||
),
|
||||
@@ -144,9 +173,9 @@ class _ParentRegisterStep2ScreenState extends State<ParentRegisterStep2Screen> {
|
||||
Switch(value: _sameAddressAsParent1, onChanged: _addParent2 ? (val) => setState(() {
|
||||
_sameAddressAsParent1 = val ?? false;
|
||||
if (_sameAddressAsParent1) {
|
||||
_addressController.text = _registrationData.parent1.address;
|
||||
_postalCodeController.text = _registrationData.parent1.postalCode;
|
||||
_cityController.text = _registrationData.parent1.city;
|
||||
_addressController.text = parent1Data.address;
|
||||
_postalCodeController.text = parent1Data.postalCode;
|
||||
_cityController.text = parent1Data.city;
|
||||
} else {
|
||||
_addressController.text = DataGenerator.address();
|
||||
_postalCodeController.text = DataGenerator.postalCode();
|
||||
@@ -204,7 +233,13 @@ class _ParentRegisterStep2ScreenState extends State<ParentRegisterStep2Screen> {
|
||||
left: 40,
|
||||
child: IconButton(
|
||||
icon: Transform(alignment: Alignment.center, transform: Matrix4.rotationY(math.pi), child: Image.asset('assets/images/chevron_right.png', height: 40)),
|
||||
onPressed: () => Navigator.pop(context),
|
||||
onPressed: () {
|
||||
if (context.canPop()) {
|
||||
context.pop();
|
||||
} else {
|
||||
context.go('/parent-register-step1');
|
||||
}
|
||||
},
|
||||
tooltip: 'Retour',
|
||||
),
|
||||
),
|
||||
@@ -216,22 +251,22 @@ class _ParentRegisterStep2ScreenState extends State<ParentRegisterStep2Screen> {
|
||||
onPressed: () {
|
||||
if (!_addParent2 || (_formKey.currentState?.validate() ?? false)) {
|
||||
if (_addParent2) {
|
||||
_registrationData.updateParent2(
|
||||
registrationData.updateParent2(
|
||||
ParentData(
|
||||
firstName: _firstNameController.text,
|
||||
lastName: _lastNameController.text,
|
||||
address: _sameAddressAsParent1 ? _registrationData.parent1.address : _addressController.text,
|
||||
postalCode: _sameAddressAsParent1 ? _registrationData.parent1.postalCode : _postalCodeController.text,
|
||||
city: _sameAddressAsParent1 ? _registrationData.parent1.city : _cityController.text,
|
||||
address: _sameAddressAsParent1 ? parent1Data.address : _addressController.text,
|
||||
postalCode: _sameAddressAsParent1 ? parent1Data.postalCode : _postalCodeController.text,
|
||||
city: _sameAddressAsParent1 ? parent1Data.city : _cityController.text,
|
||||
phone: _phoneController.text,
|
||||
email: _emailController.text,
|
||||
password: _passwordController.text,
|
||||
)
|
||||
);
|
||||
} else {
|
||||
_registrationData.updateParent2(null);
|
||||
registrationData.updateParent2(null);
|
||||
}
|
||||
Navigator.pushNamed(context, '/parent-register/step3', arguments: _registrationData);
|
||||
context.go('/parent-register-step3');
|
||||
}
|
||||
},
|
||||
tooltip: 'Suivant',
|
||||
|
||||
Reference in New Issue
Block a user