🎉 AfterWork - Application Mobile de Réseau Social d'Événements
Une application mobile multiplateforme permettant de créer, gérer et participer à des événements sociaux avec vos amis.
📋 Table des Matières
- À propos
- Fonctionnalités
- Architecture
- Technologies
- Installation
- Configuration
- Structure du Projet
- Développement
- Tests
- Déploiement
- Contribution
- Documentation API
🎯 À propos
AfterWork est une plateforme sociale mobile complète qui permet aux utilisateurs de :
- Organiser et découvrir des événements sociaux
- Se connecter avec des amis et étendre leur réseau
- Partager des moments via des stories et posts
- Gérer leurs participations et réservations
- Explorer des établissements et lieux d'intérêt
L'application est construite avec Flutter pour assurer une expérience native sur toutes les plateformes (iOS, Android, Web, Windows, Linux, macOS).
✨ Fonctionnalités
🎪 Gestion des Événements
- ✅ Création d'événements avec images, catégories et localisation
- ✅ Visualisation des événements personnels et des amis
- ✅ Système de participation/désistement
- ✅ Fermeture et réouverture d'événements
- ✅ Réactions, commentaires et partages
- ✅ Filtrage par catégorie et recherche avancée
👥 Réseau Social
- ✅ Système d'amis complet (envoi, acceptation, blocage)
- ✅ Posts sociaux avec images
- ✅ Stories avec support vidéo
- ✅ Notifications en temps réel
- ✅ Profils utilisateurs enrichis avec statistiques
📍 Localisation
- ✅ Intégration Google Maps
- ✅ Sélecteur de localisation intuitif
- ✅ Exploration d'établissements
🎨 Personnalisation
- ✅ Thème clair/sombre avec persistance
- ✅ Images de profil personnalisées
- ✅ Paramètres utilisateur avancés
🏗 Architecture
Le projet suit les principes de Clean Architecture pour assurer la maintenabilité, la testabilité et la scalabilité :
lib/
├── core/ # Noyau commun de l'application
│ ├── constants/ # Constantes (couleurs, URLs, config)
│ ├── errors/ # Gestion des erreurs et exceptions
│ ├── theme/ # Thèmes et styles
│ └── utils/ # Utilitaires réutilisables
│
├── domain/ # Couche métier (logique pure)
│ ├── entities/ # Entités métier (User, Event, Friend)
│ ├── repositories/ # Interfaces des repositories
│ └── usecases/ # Cas d'utilisation métier
│
├── data/ # Couche de données
│ ├── datasources/ # Sources de données (API, cache)
│ ├── models/ # DTOs et modèles de données
│ ├── repositories/ # Implémentations des repositories
│ ├── services/ # Services (storage, sécurité)
│ └── providers/ # Providers pour l'état global
│
└── presentation/ # Couche présentation (UI)
├── screens/ # Écrans de l'application
├── widgets/ # Widgets réutilisables
├── state_management/ # BLoC et gestion d'état
└── routes/ # Gestion de la navigation
Principes Appliqués
- Separation of Concerns : Séparation claire des responsabilités
- Dependency Inversion : Les couches de haut niveau ne dépendent pas des détails
- Single Responsibility : Chaque classe a une seule raison de changer
- Interface Segregation : Interfaces spécifiques plutôt que générales
🛠 Technologies
Framework & Langage
- Flutter 3.5.1+ - Framework UI multiplateforme
- Dart 3.5.1+ - Langage de programmation
Gestion d'État
- flutter_bloc 8.1.6 - Pattern BLoC pour la gestion d'état
- provider 6.1.2 - Gestion d'état simple
- equatable 2.0.5 - Comparaison d'objets facilitée
Réseau & API
- http 1.2.1 - Client HTTP pour les requêtes API
Stockage & Persistance
- shared_preferences 2.2.3 - Préférences utilisateur
- flutter_secure_storage 9.2.2 - Stockage sécurisé (credentials)
- path_provider 2.1.3 - Accès aux chemins de fichiers
Médias & Caméra
- image_picker 1.1.1 - Sélection d'images
- camerawesome 2.1.0 - Fonctionnalités caméra avancées
- video_player 2.8.6 - Lecture vidéo
Cartes & Localisation
- google_maps_flutter 2.7.0 - Intégration Google Maps
- permission_handler 11.3.1 - Gestion des permissions
Sécurité
- encrypt 5.0.3 - Chiffrement de données
- flutter_bcrypt 1.0.8 - Hachage de mots de passe
UI & Animations
- flutter_spinkit 5.2.1 - Indicateurs de chargement
- carousel_slider 5.0.0 - Carrousels d'images
- loading_icon_button 0.0.6 - Boutons avec état de chargement
Utilitaires
- intl 0.19.0 - Internationalisation (dates en français)
- logger 2.3.0 - Logging avancé
- dartz 0.10.1 - Programmation fonctionnelle
- get_it 7.7.0 - Injection de dépendances
💻 Installation
Prérequis
- Flutter SDK 3.5.1 ou supérieur
- Dart SDK 3.5.1 ou supérieur
- Android Studio / Xcode (pour le développement mobile)
- Git
Étapes d'installation
- Cloner le repository
git clone <repository-url>
cd afterwork
- Installer les dépendances
flutter pub get
- Vérifier l'installation
flutter doctor
-
Configurer l'environnement (voir section Configuration)
-
Lancer l'application
# Mode développement
flutter run
# Mode release
flutter run --release
⚙️ Configuration
Variables d'Environnement
Créez un fichier .env à la racine du projet (copiez .env.example) :
API_BASE_URL=http://192.168.1.145:8080
ENVIRONMENT=development
GOOGLE_MAPS_API_KEY=your_google_maps_api_key_here
Configuration Build
Pour passer les variables au moment du build :
flutter run --dart-define=API_BASE_URL=https://api.production.com \
--dart-define=ENVIRONMENT=production
Configuration API Backend
L'URL de l'API backend est configurée dans lib/core/constants/env_config.dart.
Endpoints principaux :
- Authentification :
POST /users/authenticate - Événements :
GET /events,POST /events,PUT /events/{id} - Amis : endpoints de gestion des relations d'amitié
Voir la Documentation API pour plus de détails.
📁 Structure du Projet
afterwork/
├── android/ # Configuration Android
├── ios/ # Configuration iOS
├── web/ # Configuration Web
├── windows/ # Configuration Windows
├── linux/ # Configuration Linux
├── macos/ # Configuration macOS
├── lib/ # Code source Dart
│ ├── main.dart # Point d'entrée de l'application
│ ├── core/ # Code partagé
│ ├── domain/ # Logique métier
│ ├── data/ # Couche de données
│ └── presentation/ # UI et écrans
├── test/ # Tests unitaires et widgets
├── assets/ # Ressources (images, fonts, etc.)
├── pubspec.yaml # Dépendances du projet
├── analysis_options.yaml # Configuration du linter
└── README.md # Ce fichier
👨💻 Développement
Standards de Code
Le projet utilise des règles de linting strictes définies dans analysis_options.yaml :
- Utilisation obligatoire de
constpour les widgets immuables - Typage fort et inférence stricte
- Trailing commas pour une meilleure lisibilité
- Documentation des APIs publiques
Formatage du Code
# Formater tout le code
dart format .
# Analyser le code
flutter analyze
# Appliquer les corrections automatiques
dart fix --apply
Conventions de Nommage
- Classes :
PascalCase(ex:EventScreen,UserProvider) - Fichiers :
snake_case(ex:event_screen.dart,user_provider.dart) - Variables/Fonctions :
camelCase(ex:userId,getUserById) - Constants :
lowerCamelCase(ex:apiBaseUrl)
Git Workflow
- Créer une branche pour chaque feature :
feature/nom-feature - Commit avec des messages descriptifs
- Pull request pour review avant merge
🧪 Tests
Lancer les Tests
# Tous les tests
flutter test
# Tests avec coverage
flutter test --coverage
# Tests spécifiques
flutter test test/domain/entities/user_test.dart
Types de Tests
- Tests Unitaires : Logique métier et utilitaires
- Tests Widgets : Composants UI isolés
- Tests d'Intégration : Flux utilisateur complets
🚀 Déploiement
Android
# Build APK
flutter build apk --release
# Build App Bundle (recommandé pour Play Store)
flutter build appbundle --release
iOS
# Build IPA
flutter build ios --release
Web
# Build web
flutter build web --release
🤝 Contribution
Les contributions sont les bienvenues ! Pour contribuer :
- Fork le projet
- Créer une branche feature (
git checkout -b feature/AmazingFeature) - Commit vos changements (
git commit -m 'Add: Amazing Feature') - Push vers la branche (
git push origin feature/AmazingFeature) - Ouvrir une Pull Request
Guidelines de Contribution
- Respecter les standards de code du projet
- Ajouter des tests pour les nouvelles fonctionnalités
- Documenter les changements dans le README si nécessaire
- S'assurer que
flutter analyzene retourne aucune erreur
📖 Documentation API
Base URL
http://192.168.1.145:8080
Authentification
POST /users/authenticate
Authentifie un utilisateur
Body:
{
"email": "user@example.com",
"password": "hashedPassword"
}
Response:
{
"userId": "123",
"firstName": "John",
"lastName": "Doe",
"email": "user@example.com",
"token": "jwt_token_here"
}
Événements
GET /events
Récupère tous les événements
POST /events
Crée un nouvel événement
Body:
{
"title": "After-work Tech",
"description": "Soirée networking",
"startDate": "2024-01-15T19:00:00Z",
"location": "Paris, France",
"category": "Networking",
"creatorEmail": "user@example.com"
}
GET /events/{id}
Récupère un événement spécifique
PUT /events/{id}
Met à jour un événement
DELETE /events/{id}
Supprime un événement
PATCH /events/{id}/close
Ferme un événement
PATCH /events/{id}/reopen
Réouvre un événement
Pour plus de détails, consultez la documentation Swagger de l'API backend.
📝 Changelog
Version 1.0.0 (En développement)
- ✅ Architecture Clean implémentée
- ✅ Gestion des événements complète
- ✅ Système d'amis fonctionnel
- ✅ Stories et posts sociaux
- ✅ Thème clair/sombre
- ✅ Intégration Google Maps
- 🔄 Tests en cours d'implémentation
📄 License
Ce projet est propriétaire. Tous droits réservés.
👥 Équipe
Développé avec ❤️ par l'équipe AfterWork
📞 Support
Pour toute question ou problème :
- Ouvrir une issue sur le repository
- Contacter l'équipe de développement
Fait avec Flutter 🚀