feat: Implement Parent Registration Step 4 and Step 5 Screens #46

Merged
hmoussa merged 1 commits from feature/FRONT-01 into dev 2025-08-12 13:54:33 +00:00
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 For help getting started with Flutter development, view the
[online documentation](https://docs.flutter.dev/), which offers tutorials, [online documentation](https://docs.flutter.dev/), which offers tutorials,
samples, guidance on mobile development, and a full API reference. 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 'package:go_router/go_router.dart';
import '../screens/auth/login_screen.dart'; import '../screens/auth/login_screen.dart';
import '../screens/auth/register_choice_screen.dart'; import '../screens/auth/register_choice_screen.dart';
import '../screens/auth/parent_register_step1_screen.dart'; import '../screens/auth/parent/parent_register_step1_screen.dart';
import '../screens/auth/parent_register_step2_screen.dart'; import '../screens/auth/parent/parent_register_step2_screen.dart';
import '../screens/auth/parent_register_step3_screen.dart'; import '../screens/auth/parent/parent_register_step3_screen.dart';
import '../screens/auth/parent_register_step4_screen.dart'; import '../screens/auth/parent/parent_register_step4_screen.dart';
import '../screens/auth/parent_register_step5_screen.dart'; import '../screens/auth/parent/parent_register_step5_screen.dart';
import '../screens/home/home_screen.dart'; import '../screens/home/home_screen.dart';
import '../models/user_registration_data.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:flutter/material.dart';
import 'package:google_fonts/google_fonts.dart'; import 'package:google_fonts/google_fonts.dart';
import 'dart:math' as math; // Pour la rotation du chevron import 'dart:math' as math; // Pour la rotation du chevron
import '../../models/user_registration_data.dart'; // Import du modèle de données 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 '../../../utils/data_generator.dart'; // Import du générateur de données
import '../../widgets/custom_app_text_field.dart'; // Import du widget CustomAppTextField import '../../../widgets/custom_app_text_field.dart'; // Import du widget CustomAppTextField
import '../../models/card_assets.dart'; // Import des enums de cartes import '../../../models/card_assets.dart'; // Import des enums de cartes
class ParentRegisterStep1Screen extends StatefulWidget { class ParentRegisterStep1Screen extends StatefulWidget {
const ParentRegisterStep1Screen({super.key}); const ParentRegisterStep1Screen({super.key});

View File

@ -1,10 +1,10 @@
import 'package:flutter/material.dart'; import 'package:flutter/material.dart';
import 'package:google_fonts/google_fonts.dart'; import 'package:google_fonts/google_fonts.dart';
import 'dart:math' as math; // Pour la rotation du chevron import 'dart:math' as math; // Pour la rotation du chevron
import '../../models/user_registration_data.dart'; // Import du modèle import '../../../models/user_registration_data.dart'; // Import du modèle
import '../../utils/data_generator.dart'; // Import du générateur import '../../../utils/data_generator.dart'; // Import du générateur
import '../../widgets/custom_app_text_field.dart'; // Import du widget import '../../../widgets/custom_app_text_field.dart'; // Import du widget
import '../../models/card_assets.dart'; // Import des enums de cartes import '../../../models/card_assets.dart'; // Import des enums de cartes
class ParentRegisterStep2Screen extends StatefulWidget { class ParentRegisterStep2Screen extends StatefulWidget {
final UserRegistrationData registrationData; // Accepte les données de l'étape 1 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 'package:google_fonts/google_fonts.dart';
import 'dart:math' as math; // Pour la rotation du chevron import 'dart:math' as math; // Pour la rotation du chevron
import 'package:flutter/gestures.dart'; // Pour PointerDeviceKind 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_picker/image_picker.dart';
// import 'package:image_cropper/image_cropper.dart'; // Supprimé // import 'package:image_cropper/image_cropper.dart'; // Supprimé
import 'dart:io' show File, Platform; // Ajout de Platform import 'dart:io' show File, Platform; // Ajout de Platform
import 'package:flutter/foundation.dart' show kIsWeb; // Import pour kIsWeb import 'package:flutter/foundation.dart' show kIsWeb; // Import pour kIsWeb
import '../../widgets/custom_app_text_field.dart'; // Import du nouveau widget TextField import '../../../widgets/custom_app_text_field.dart'; // Import du nouveau widget TextField
import '../../widgets/app_custom_checkbox.dart'; // Import du nouveau widget Checkbox 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 '../../../models/user_registration_data.dart'; // Import du modèle de données
import '../../utils/data_generator.dart'; // Import du générateur import '../../../utils/data_generator.dart'; // Import du générateur
import '../../models/card_assets.dart'; // Import des enums de cartes import '../../../models/card_assets.dart'; // Import des enums de cartes
// La classe _ChildFormData est supprimée car on utilise ChildData du modèle // 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 '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/widgets/app_custom_checkbox.dart'; // Import de la checkbox personnalisée
// import 'package:p_tits_pas/models/placeholder_registration_data.dart'; // Remplacé // import 'package:p_tits_pas/models/placeholder_registration_data.dart'; // Remplacé
import '../../models/user_registration_data.dart'; // Import du vrai modèle import '../../../models/user_registration_data.dart'; // Import du vrai modèle
import '../../utils/data_generator.dart'; // Import du générateur import '../../../utils/data_generator.dart'; // Import du générateur
import '../../models/card_assets.dart'; // Import des enums de cartes import '../../../models/card_assets.dart'; // Import des enums de cartes
class ParentRegisterStep4Screen extends StatefulWidget { class ParentRegisterStep4Screen extends StatefulWidget {
final UserRegistrationData registrationData; // Accepte les données final UserRegistrationData registrationData; // Accepte les données

View File

@ -1,10 +1,10 @@
import 'package:flutter/material.dart'; import 'package:flutter/material.dart';
import 'package:google_fonts/google_fonts.dart'; import 'package:google_fonts/google_fonts.dart';
import '../../models/user_registration_data.dart'; // Utilisation du vrai modèle import '../../../models/user_registration_data.dart'; // Utilisation du vrai modèle
import '../../widgets/image_button.dart'; // Import du ImageButton import '../../../widgets/image_button.dart'; // Import du ImageButton
import '../../models/card_assets.dart'; // Import des enums de cartes import '../../../models/card_assets.dart'; // Import des enums de cartes
import 'package:flutter/foundation.dart' show kIsWeb; 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é // 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}) { Widget _buildDisplayFieldValue(BuildContext context, String label, String value, {bool multiLine = false, double fieldHeight = 50.0, double labelFontSize = 18.0}) {