2024-09-24 00:32:20 +00:00
2024-09-24 00:32:20 +00:00
2024-09-24 00:32:20 +00:00
2024-09-24 00:32:20 +00:00
2024-11-02 15:27:26 +00:00

🎉 AfterWork - Application Mobile de Réseau Social d'Événements

Flutter Dart License Status

Une application mobile multiplateforme permettant de créer, gérer et participer à des événements sociaux avec vos amis.


📋 Table des Matières


🎯 À 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

  1. Cloner le repository
git clone <repository-url>
cd afterwork
  1. Installer les dépendances
flutter pub get
  1. Vérifier l'installation
flutter doctor
  1. Configurer l'environnement (voir section Configuration)

  2. 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 const pour 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

  1. Créer une branche pour chaque feature : feature/nom-feature
  2. Commit avec des messages descriptifs
  3. 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 :

  1. Fork le projet
  2. Créer une branche feature (git checkout -b feature/AmazingFeature)
  3. Commit vos changements (git commit -m 'Add: Amazing Feature')
  4. Push vers la branche (git push origin feature/AmazingFeature)
  5. 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 analyze ne 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 🚀

Description
No description provided
Readme 22 MiB
Languages
Dart 86%
C 9.9%
C++ 1.6%
CMake 1.3%
PowerShell 0.7%
Other 0.4%