refactor(inscription): Refonte complète du processus d'inscription - Modèles etdonnées: Suppression de placeholder_registration_data.dart, ajout de user_registration_data.dart, data_generator.dart et card_assets.dart - Interface utilisateur: Refonte des écrans d'inscription, amélioration des widgets, ajout de cartes colorées - Assets: Ajout de nouvelles cartes colorées - Configuration: Mise à jour de pubspec.yaml et app_router.dart

This commit is contained in:
Julien Martin
2025-05-12 12:00:49 +02:00
parent acb602643a
commit 1496f7f174
32 changed files with 1035 additions and 717 deletions
@@ -3,18 +3,30 @@ import 'package:google_fonts/google_fonts.dart';
import 'package:p_tits_pas/widgets/custom_decorated_text_field.dart'; // Import du nouveau widget
import 'dart:math' as math; // Pour la rotation du chevron
import 'package:p_tits_pas/widgets/app_custom_checkbox.dart'; // Import de la checkbox personnalisée
import 'package:p_tits_pas/models/placeholder_registration_data.dart';
// import 'package:p_tits_pas/models/placeholder_registration_data.dart'; // Remplacé
import '../../models/user_registration_data.dart'; // Import du vrai modèle
import '../../utils/data_generator.dart'; // Import du générateur
class ParentRegisterStep4Screen extends StatefulWidget {
const ParentRegisterStep4Screen({super.key});
final UserRegistrationData registrationData; // Accepte les données
const ParentRegisterStep4Screen({super.key, required this.registrationData});
@override
State<ParentRegisterStep4Screen> createState() => _ParentRegisterStep4ScreenState();
}
class _ParentRegisterStep4ScreenState extends State<ParentRegisterStep4Screen> {
late UserRegistrationData _registrationData; // État local
final _motivationController = TextEditingController();
bool _cguAccepted = false;
bool _cguAccepted = true; // Pour le test, CGU acceptées par défaut
@override
void initState() {
super.initState();
_registrationData = widget.registrationData;
_motivationController.text = DataGenerator.motivation(); // Générer la motivation
}
@override
void dispose() {
@@ -113,7 +125,7 @@ Ut wisi enim ad minim veniam, quis nostrud exerci tation ullamcorper suscipit lo
),
const SizedBox(height: 20),
Text(
'Merci de motiver votre demande création de compte :',
'Motivation de votre demande',
style: GoogleFonts.merienda(fontSize: 22, fontWeight: FontWeight.bold, color: Colors.black87),
textAlign: TextAlign.center,
),
@@ -132,35 +144,23 @@ Ut wisi enim ad minim veniam, quis nostrud exerci tation ullamcorper suscipit lo
const SizedBox(height: 30),
GestureDetector(
onTap: () {
// Si on clique sur la zone et que ce n'est pas encore accepté,
// ou si c'est déjà accepté (l'utilisateur veut peut-être revoir les CGU)
_showCGUModal();
if (!_cguAccepted) {
_showCGUModal();
}
},
child: AppCustomCheckbox(
label: 'J\'accepte les conditions générales d\'utilisation',
value: _cguAccepted,
onChanged: (newValue) {
// La logique d'ouverture de la modale est déclenchée par le GestureDetector externe.
// La modale mettra à jour _cguAccepted et reconstruira le widget.
// Si newValue est true (ce qui signifie que la modale a été acceptée et _cguAccepted mis à jour),
// on n'a rien à faire de plus ici.
// Si newValue est false (l'utilisateur a réussi à la décocher d'une manière ou d'une autre,
// ce qui ne devrait pas arriver car on ouvre toujours la modale),
// on pourrait vouloir forcer l'affichage de la modale aussi.
// Pour l'instant, on se fie au fait que la modale gère l'acceptation.
if (!_cguAccepted) { // Si pas encore accepté, la modale doit s'ouvrir
_showCGUModal();
} else if (newValue == false) { // Si on essaie de décocher
// Optionnel: Forcer la non-acceptation et rouvrir la modale ?
// Pour l'instant, on ne fait rien, la modale gère.
if (!_cguAccepted) {
_showCGUModal();
} else {
setState(() => _cguAccepted = false);
}
},
// Vous pouvez ajuster checkboxSize et checkmarkSizeFactor si nécessaire
),
),
const SizedBox(height: 40),
// On ajoutera un Form et un bouton de soumission principal plus tard
// Pour l'instant, les chevrons servent à la navigation simple
],
),
),
@@ -182,19 +182,16 @@ Ut wisi enim ad minim veniam, quis nostrud exerci tation ullamcorper suscipit lo
icon: Image.asset('assets/images/chevron_right.png', height: 40),
onPressed: _cguAccepted
? () {
print('Motivation: ${_motivationController.text}');
print('CGU acceptées: $_cguAccepted');
// TODO: Rassembler toutes les données des étapes précédentes
final dummyData = PlaceholderRegistrationData(parent1Name: "Parent 1 Nom (Exemple)");
_registrationData.updateMotivation(_motivationController.text);
_registrationData.acceptCGU();
Navigator.pushNamed(
context,
'/parent-register/step5',
arguments: dummyData // Passer les données (ici factices)
arguments: _registrationData
);
}
: null, // Désactiver si les CGU ne sont pas acceptées
: null,
tooltip: 'Suivant',
),
),