Compare commits
2 Commits
2a9883a149
...
8bd1694f70
| Author | SHA1 | Date | |
|---|---|---|---|
| 8bd1694f70 | |||
|
|
4042d5823e |
74
frontend/CONTRIBUTING.md
Normal file
74
frontend/CONTRIBUTING.md
Normal 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 d’une 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 qu’il 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
|
||||||
@ -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 d’une 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 d’entré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
|
||||||
|
|||||||
@ -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
|
||||||
@ -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';
|
||||||
|
|
||||||
|
|||||||
18
frontend/lib/screens/auth/am/am_register_step1_sceen.dart
Normal file
18
frontend/lib/screens/auth/am/am_register_step1_sceen.dart
Normal 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'),
|
||||||
|
),
|
||||||
|
);
|
||||||
|
}
|
||||||
|
}
|
||||||
@ -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});
|
||||||
@ -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
|
||||||
@ -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
|
||||||
|
|
||||||
@ -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
|
||||||
@ -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}) {
|
||||||
Loading…
x
Reference in New Issue
Block a user