feat: Implement Parent Registration Step 4 and Step 5 Screens

- Added ParentRegisterStep4Screen for capturing motivation and CGU acceptance.
- Integrated custom checkbox and text field widgets for better UI.
- Implemented modal dialog for displaying CGU text.
- Created ParentRegisterStep5Screen for summarizing registration data.
- Added functionality to display parent and child details with edit options.
- Included confirmation modal upon submission of the registration request.
This commit is contained in:
Hanim 2025-08-12 15:49:46 +02:00
parent 2a9883a149
commit 4042d5823e
10 changed files with 173 additions and 27 deletions

74
frontend/CONTRIBUTING.md Normal file
View File

@ -0,0 +1,74 @@
# 🚀 Guide de contribution Projet P'titsPas (Flutter)
Bienvenue ! Ce guide explique comment collaborer efficacement sur ce projet Flutter.
---
## 📌 Branches Git
Le projet suit une stratégie de branches simple et efficace :
| Branche | Rôle |
|---------------|---------------------------------------------|
| `main` | Production (version stable déployée) |
| `develop` | Intégration (version en cours de test) |
| `feature/XXX` | Développement dune nouvelle fonctionnalité |
| `fix/XXX` | Correction de bug |
| `hotfix/XXX` | Patch urgent sur `main` |
---
## ✅ Cycle de développement
1. **Crée une branche à partir de `develop`**
```bash
git checkout develop
git pull origin develop
git checkout -b feature/FRONT-XXX-nom-fonctionnalite
2. Travaille localement + commit régulièrement
Commits clairs et concis :
Nom de la branche: Fonctionnalité push
```bash
git commit -m "FRONT-021: ajout du widget zone enfants"
```
3. Pousse ta branche
Exemple
```bash
git push origin feature/FRONT-XXX-nom
4. Ouvre une Pull Request vers develop
Ps : **La PR vers develop est faite lorsque une fonctionnalité du ticket à été fait et testé ou lorsque tous le ticket est finis**
- Titre : [FRONT-021] Widget zone enfants
- Description : ce que tu as fait, ce quil reste à tester
- Lie le ticket associé (ex: Fixes #21)
5. Relecture & Merge
- Au moins 1 review nécessaire
- Pas de commit direct sur develop ou main
6. Une fois merge, supprime la branche distante:
PS: **La branche est supprimé que lorsque tout le ticket a été consommé**
```bash
git push origin --delete feature/FRONT-XXX-nom
```
🧼 Règles de bonne conduite
- Une PR = une seule fonctionnalité ou correction
- Code commenté si logique complexe
- Garder les noms de variables/dossiers clairs et en anglais
- Pas de code mort ou non utilisé
- Tester les commandes du workflow(dans le .github) afin d'être sur de ne pas avoir des erreur dans le code et pour etre sur de passer les tests du Workflow

View File

@ -14,3 +14,56 @@ A few resources to get you started if this is your first Flutter project:
For help getting started with Flutter development, view the
[online documentation](https://docs.flutter.dev/), which offers tutorials,
samples, guidance on mobile development, and a full API reference.
### Workflow Git
Le projet suit un **Git Flow simplifié** avec 3 branches principales :
- `main` : version stable et déployée en production
- `develop` : version intégrée et testée avant passage en production
- `feature/*`, `fix/*`, `hotfix/*` : branches spécifiques au développement
**Cycle standard :**
```bash
# Création dune feature
git checkout develop
git checkout -b feature/FRONT-021-zone-enfants
# Développement
git add .
git commit -m "FRONT-021: Widget zone enfants"
git push origin feature/FRONT-021-zone-enfants
# Pull Request => vers develop
# Merge → suppression de la branche
Voir CONTRIBUTING.md pour les conventions détaillées.
```
### Structure du projet Flutter
Le projet suit une architecture modulaire MVC simplifiée compatible avec Provider (ou Riverpod léger).
```plaintext
lib/
├── main.dart # Point dentrée
├── routes/ # go_router ou auto_route
├── models/ # Classes de données (User, Parent, Enfant, etc.)
├── services/ # Requêtes HTTP, AuthService, StorageService
├── utils/ # Helpers, validateurs, formatteurs
├── widgets/ # Composants UI réutilisables
├── screens/ # Pages par grande fonctionnalité
│ ├── auth/ # Connexion, inscription, mot de passe oublié
│ ├── registration/ # Création parent / assistante maternelle
│ ├── dashboard/ # Tableau de bord parent / AM / gestionnaire
│ ├── profile/ # Gestion des infos utilisateur
│ └── children/ # Fiches enfants
```
### Architecture choisie
🟩 Type : MVC Modulaire avec Provider (ou Riverpod léger)
Avantages :
- Simple à prendre en main
- Rapide à structurer
- Permet la séparation des features
- Adaptée à un projet Flutter Web PWA

View File

@ -1 +1,2 @@
flutter.sdk=C:\\Users\\marti\\dev\\flutter
flutter.sdk=C:\\Users\\myhan\\flutter
sdk.dir=C:\\Users\\myhan\\AppData\\Local\\Android\\Sdk

View File

@ -2,11 +2,11 @@ import 'package:flutter/material.dart';
import 'package:go_router/go_router.dart';
import '../screens/auth/login_screen.dart';
import '../screens/auth/register_choice_screen.dart';
import '../screens/auth/parent_register_step1_screen.dart';
import '../screens/auth/parent_register_step2_screen.dart';
import '../screens/auth/parent_register_step3_screen.dart';
import '../screens/auth/parent_register_step4_screen.dart';
import '../screens/auth/parent_register_step5_screen.dart';
import '../screens/auth/parent/parent_register_step1_screen.dart';
import '../screens/auth/parent/parent_register_step2_screen.dart';
import '../screens/auth/parent/parent_register_step3_screen.dart';
import '../screens/auth/parent/parent_register_step4_screen.dart';
import '../screens/auth/parent/parent_register_step5_screen.dart';
import '../screens/home/home_screen.dart';
import '../models/user_registration_data.dart';

View File

@ -0,0 +1,18 @@
import 'package:flutter/material.dart';
class AmRegisterStep1Screen extends StatelessWidget {
const AmRegisterStep1Screen({Key? key}) : super(key: key);
@override
Widget build(BuildContext context) {
return Scaffold(
appBar: AppBar(
title: const Text('Étape 1 - Inscription AM'),
),
body: const Center(
child: Text('Contenu de l\'étape 1'),
),
);
}
}

View File

@ -1,10 +1,10 @@
import 'package:flutter/material.dart';
import 'package:google_fonts/google_fonts.dart';
import 'dart:math' as math; // Pour la rotation du chevron
import '../../models/user_registration_data.dart'; // Import du modèle de données
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 '../../../models/user_registration_data.dart'; // Import du modèle de données
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
class ParentRegisterStep1Screen extends StatefulWidget {
const ParentRegisterStep1Screen({super.key});

View File

@ -1,10 +1,10 @@
import 'package:flutter/material.dart';
import 'package:google_fonts/google_fonts.dart';
import 'dart:math' as math; // Pour la rotation du chevron
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 '../../../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
class ParentRegisterStep2Screen extends StatefulWidget {
final UserRegistrationData registrationData; // Accepte les données de l'étape 1

View File

@ -2,16 +2,16 @@ import 'package:flutter/material.dart';
import 'package:google_fonts/google_fonts.dart';
import 'dart:math' as math; // Pour la rotation du chevron
import 'package:flutter/gestures.dart'; // Pour PointerDeviceKind
import '../../widgets/hover_relief_widget.dart'; // Import du nouveau widget
import '../../../widgets/hover_relief_widget.dart'; // Import du nouveau widget
import 'package:image_picker/image_picker.dart';
// import 'package:image_cropper/image_cropper.dart'; // Supprimé
import 'dart:io' show File, Platform; // Ajout de Platform
import 'package:flutter/foundation.dart' show kIsWeb; // Import pour kIsWeb
import '../../widgets/custom_app_text_field.dart'; // Import du nouveau widget TextField
import '../../widgets/app_custom_checkbox.dart'; // Import du nouveau widget Checkbox
import '../../models/user_registration_data.dart'; // Import du modèle de données
import '../../utils/data_generator.dart'; // Import du générateur
import '../../models/card_assets.dart'; // Import des enums de cartes
import '../../../widgets/custom_app_text_field.dart'; // Import du nouveau widget TextField
import '../../../widgets/app_custom_checkbox.dart'; // Import du nouveau widget Checkbox
import '../../../models/user_registration_data.dart'; // Import du modèle de données
import '../../../utils/data_generator.dart'; // Import du générateur
import '../../../models/card_assets.dart'; // Import des enums de cartes
// La classe _ChildFormData est supprimée car on utilise ChildData du modèle

View File

@ -4,9 +4,9 @@ import 'package:p_tits_pas/widgets/custom_decorated_text_field.dart'; // Import
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'; // Remplacé
import '../../models/user_registration_data.dart'; // Import du vrai modèle
import '../../utils/data_generator.dart'; // Import du générateur
import '../../models/card_assets.dart'; // Import des enums de cartes
import '../../../models/user_registration_data.dart'; // Import du vrai modèle
import '../../../utils/data_generator.dart'; // Import du générateur
import '../../../models/card_assets.dart'; // Import des enums de cartes
class ParentRegisterStep4Screen extends StatefulWidget {
final UserRegistrationData registrationData; // Accepte les données

View File

@ -1,10 +1,10 @@
import 'package:flutter/material.dart';
import 'package:google_fonts/google_fonts.dart';
import '../../models/user_registration_data.dart'; // Utilisation du vrai modèle
import '../../widgets/image_button.dart'; // Import du ImageButton
import '../../models/card_assets.dart'; // Import des enums de cartes
import '../../../models/user_registration_data.dart'; // Utilisation du vrai modèle
import '../../../widgets/image_button.dart'; // Import du ImageButton
import '../../../models/card_assets.dart'; // Import des enums de cartes
import 'package:flutter/foundation.dart' show kIsWeb;
import '../../widgets/custom_decorated_text_field.dart'; // Import du CustomDecoratedTextField
import '../../../widgets/custom_decorated_text_field.dart'; // Import du CustomDecoratedTextField
// Nouvelle méthode helper pour afficher un champ de type "lecture seule" stylisé
Widget _buildDisplayFieldValue(BuildContext context, String label, String value, {bool multiLine = false, double fieldHeight = 50.0, double labelFontSize = 18.0}) {