# UnionFlow Mobile đŸ“±
**Application mobile de gestion intĂ©grĂ© pour les unions et associations Lions Club de CĂŽte d'Ivoire** [![Flutter](https://img.shields.io/badge/Flutter-3.5.3-blue?logo=flutter)](https://flutter.dev) [![Dart](https://img.shields.io/badge/Dart-3.5.3-blue?logo=dart)](https://dart.dev) [![License](https://img.shields.io/badge/License-Proprietary-red)]() [![Status](https://img.shields.io/badge/Status-Production%20Ready-green)]() [FonctionnalitĂ©s](#-fonctionnalitĂ©s) ‱ [Installation](#-installation) ‱ [Architecture](#-architecture) ‱ [Documentation](#-documentation) ‱ [SĂ©curitĂ©](#-sĂ©curitĂ©)
--- ## 📋 Description UnionFlow Mobile est une application Flutter moderne conçue pour les membres des Lions Clubs de CĂŽte d'Ivoire. Elle offre une suite complĂšte de fonctionnalitĂ©s pour la gestion quotidienne des unions et associations. ### Modules Principaux - đŸ§‘â€đŸ€â€đŸ§‘ **Membres** - Gestion complĂšte des adhĂ©rents avec KYC/LCB-FT - 💰 **Finances** - Mutuelles d'Ă©pargne et crĂ©dit avec conformitĂ© anti-blanchiment - 📅 **ÉvĂ©nements** - Organisation et suivi des Ă©vĂ©nements Lions - đŸ€ **SolidaritĂ©** - SystĂšme d'entraide entre membres - 📊 **Dashboard** - Tableaux de bord en temps rĂ©el (WebSocket) - 🔔 **Notifications** - Alertes en temps rĂ©el - 📄 **Rapports** - Export PDF/Excel des donnĂ©es - 🏱 **Organisations** - Gestion multi-niveaux des clubs --- ## 🚀 Installation ### PrĂ©requis | Outil | Version | Lien | |-------|---------|------| | Flutter | 3.5.3+ | [flutter.dev](https://flutter.dev) | | Dart | 3.5.3+ | Inclus avec Flutter | | Android Studio | Latest | Pour Android | | Xcode | 14+ | Pour iOS (macOS uniquement) | | Git | Latest | [git-scm.com](https://git-scm.com) | ### Cloner le Repository ```bash git clone https://git.lions.dev/lionsdev/unionflow-mobile-apps.git cd unionflow-mobile-apps ``` ### Installation des DĂ©pendances ```bash flutter pub get ``` ### GĂ©nĂ©ration du Code (Build Runner) ```bash # GĂ©nĂ©ration complĂšte flutter pub run build_runner build --delete-conflicting-outputs # GĂ©nĂ©ration en watch mode (dĂ©veloppement) flutter pub run build_runner watch ``` ### Configuration des Environnements L'application supporte 3 environnements: **dev**, **staging**, **prod**. #### DĂ©veloppement (par dĂ©faut) ```bash flutter run --dart-define=ENV=dev ``` #### Staging ```bash flutter run --dart-define=ENV=staging \ --dart-define=API_URL=https://api-staging.lions.dev \ --dart-define=KEYCLOAK_URL=https://security-staging.lions.dev \ --dart-define=WS_URL=wss://api-staging.lions.dev ``` #### Production ```bash flutter run --dart-define=ENV=prod \ --dart-define=API_URL=https://api.lions.dev \ --dart-define=KEYCLOAK_URL=https://security.lions.dev \ --dart-define=WS_URL=wss://api.lions.dev ``` **Configuration par dĂ©faut** (`lib/core/config/environment.dart`): | Environnement | API Base URL | Keycloak URL | WebSocket URL | Logs | |---------------|--------------|--------------|---------------|------| | dev | http://localhost:8085 | http://localhost:8180 | ws://localhost:8085 | ✅ | | staging | https://api-staging.lions.dev | https://security-staging.lions.dev | wss://api-staging.lions.dev | ✅ | | prod | https://api.lions.dev | https://security.lions.dev | wss://api.lions.dev | ❌ | --- ## 📩 Build pour Production ### Android APK (Debug) ```bash flutter build apk --debug --dart-define=ENV=dev ``` ### Android APK (Release - Production) ```bash flutter build apk --release \ --dart-define=ENV=prod \ --dart-define=API_URL=https://api.lions.dev \ --dart-define=KEYCLOAK_URL=https://security.lions.dev \ --dart-define=WS_URL=wss://api.lions.dev \ --obfuscate \ --split-debug-info=build/app/outputs/symbols ``` **Fichier gĂ©nĂ©rĂ©**: `build/app/outputs/flutter-apk/app-release.apk` ### Android App Bundle (AAB - Google Play) ```bash flutter build appbundle --release \ --dart-define=ENV=prod \ --dart-define=API_URL=https://api.lions.dev \ --dart-define=KEYCLOAK_URL=https://security.lions.dev \ --dart-define=WS_URL=wss://api.lions.dev \ --obfuscate \ --split-debug-info=build/app/outputs/symbols ``` **Fichier gĂ©nĂ©rĂ©**: `build/app/outputs/bundle/release/app-release.aab` ### iOS IPA (App Store) ```bash flutter build ipa --release \ --dart-define=ENV=prod \ --dart-define=API_URL=https://api.lions.dev \ --dart-define=KEYCLOAK_URL=https://security.lions.dev \ --dart-define=WS_URL=wss://api.lions.dev \ --obfuscate \ --split-debug-info=build/ios/symbols ``` **Fichier gĂ©nĂ©rĂ©**: `build/ios/ipa/unionflow_mobile_apps.ipa` ### Scripts de Build AutomatisĂ©s Des scripts PowerShell sont disponibles dans `scripts/build/`: ```bash # Android APK .\scripts\build\build-android-release.ps1 # Android AAB .\scripts\build\build-android-bundle.ps1 # iOS IPA .\scripts\build\build-ios-release.ps1 ``` --- ## đŸ—ïž Architecture ### Clean Architecture + BLoC Pattern ``` lib/ ├── core/ # Code partagĂ© │ ├── cache/ # SystĂšme de cache (CacheService, Decorator) │ ├── config/ # Configuration environnements │ ├── constants/ # Constantes app (timeouts, URLs, etc.) │ ├── di/ # Injection de dĂ©pendances (get_it) │ ├── navigation/ # Routing (go_router) │ ├── network/ # API client (Dio) │ ├── storage/ # Cache managers │ └── utils/ # Logger, helpers │ ├── features/ # Modules mĂ©tier │ ├── authentication/ │ │ ├── data/ # Data sources, repositories, models │ │ ├── domain/ # Entities, use cases │ │ └── presentation/ # BLoC, pages, widgets │ ├── dashboard/ │ ├── members/ │ ├── contributions/ │ ├── events/ │ ├── solidarity/ │ ├── organizations/ │ ├── notifications/ │ ├── profile/ │ ├── reports/ │ └── admin/ │ ├── shared/ # Composants UI rĂ©utilisables │ ├── design_system/ # Design tokens, thĂšme │ └── widgets/ # Widgets partagĂ©s (buttons, cards, etc.) │ └── main.dart # Point d'entrĂ©e ``` ### Technologies ClĂ©s | CatĂ©gorie | Package | Version | Usage | |-----------|---------|---------|-------| | **State Management** | flutter_bloc | ^8.1.6 | BLoC pattern | | **Dependency Injection** | get_it | ^7.7.0 | Service locator | | | injectable | ^2.4.4 | Code generation DI | | **Networking** | dio | ^5.7.0 | HTTP client | | | pretty_dio_logger | ^1.4.0 | Logging HTTP | | **Authentication** | flutter_appauth | ^6.0.2 | OAuth/OIDC | | | jwt_decoder | ^2.0.1 | JWT validation | | | flutter_secure_storage | ^9.2.2 | Secure token storage | | **Cache** | shared_preferences | ^2.3.2 | Preferences L2 cache | | **UI** | fl_chart | ^0.66.2 | Graphiques | | | cached_network_image | ^3.4.1 | Images avec cache | | | shimmer | ^3.0.0 | Loading placeholders | | **Routing** | go_router | ^15.1.2 | Navigation dĂ©clarative | | **WebSocket** | web_socket_channel | ^3.0.1 | Temps rĂ©el | | **Export** | pdf | ^3.11.1 | Export PDF | | | excel | ^4.0.6 | Export Excel | | | csv | ^6.0.0 | Export CSV | --- ## 🎯 FonctionnalitĂ©s ### 1. Dashboard Temps RĂ©el - **WebSocket** pour mises Ă  jour en temps rĂ©el - **Cache multi-niveaux** (L1: mĂ©moire, L2: disque) - **Auto-refresh** via Kafka events - **MĂ©triques**: membres, cotisations, Ă©pargne, crĂ©dit - **Graphiques**: Évolution mensuelle, rĂ©partition ### 2. Gestion des Membres - **CRUD** complet avec pagination (20 items/page) - **Recherche avancĂ©e** avec debounce (300ms) - **KYC/LCB-FT** : niveau vigilance, statut, date vĂ©rification - **Fiche membre** : photo, coordonnĂ©es, statut, historique - **Scroll infini** (lazy loading) ### 3. Mutuelles Épargne & CrĂ©dit - **DĂ©pĂŽts/Retraits** avec validation LCB-FT - **Transferts** entre comptes - **Demandes de crĂ©dit** avec workflow approbation - **Validation seuils** anti-blanchiment (≀500k FCFA sans justificatif) - **Upload piĂšces justificatives** (JPEG, PNG, PDF < 5MB) - **Calcul intĂ©rĂȘts** automatique ### 4. ÉvĂ©nements - **CrĂ©ation/Modification** d'Ă©vĂ©nements - **Inscriptions** en ligne - **Paiements** intĂ©grĂ©s - **Notifications** push pour rappels ### 5. SolidaritĂ© - **Demandes d'aide** entre membres - **Propositions d'aide** avec budget - **Workflow validation** par admin - **Historique** transparent ### 6. Notifications - **Temps rĂ©el** via WebSocket - **Push notifications** (flutter_local_notifications) - **Badge** de compteur non lues - **Filtres** par type et statut ### 7. Rapports & Export - **PDF** : reçus de paiement, rapports mensuels - **Excel** : listes membres, cotisations - **CSV** : export donnĂ©es brutes - **Share** via share_plus --- ## 🔒 SĂ©curitĂ© **Documentation complĂšte**: [SECURITE_PRODUCTION.md](docs/SECURITE_PRODUCTION.md) ### Mesures ImplĂ©mentĂ©es ✅ **Stockage sĂ©curisĂ©** - FlutterSecureStorage (AES-256 Android, Keychain iOS) - Tokens JWT chiffrĂ©s ✅ **Authentification** - OAuth 2.0 / OIDC avec Keycloak - JWT validation (expiry + issuer) - Auto-refresh token avec verrouillage global - Logout automatique si token invalide ✅ **Network Security** - HTTPS obligatoire en production - WSS (WebSocket Secure) - Cleartext traffic dĂ©sactivĂ© (`android:usesCleartextTrafficPermitted="false"`) - Network security config (exceptions dev seulement) - HTTP timeouts (15s connect/receive) ✅ **Android Hardening** - ProGuard/R8 obfuscation activĂ©e - Resource shrinking activĂ© - Backup dĂ©sactivĂ© (`android:allowBackup="false"`) ✅ **Logging SĂ©curisĂ©** - Logs dĂ©sactivĂ©s en production (`AppConfig.enableLogging=false`) - Tokens jamais loggĂ©s - Crash reporting (Sentry/Crashlytics ready) ✅ **File Upload** - Validation taille (max 5MB) - Validation MIME type (JPEG, PNG, PDF) - Hash MD5 + SHA256 pour intĂ©gritĂ© - UUID pour noms de fichiers (no path traversal) ✅ **OWASP Mobile Top 10 Compliant** ### TODO Production ⚠ **Keystore de production** (Android) - GĂ©nĂ©rer keystore release - Configurer `android/key.properties` - Activer `signingConfig = signingConfigs.release` 📊 **Crash Reporting** (RecommandĂ©) - IntĂ©grer Sentry ou Firebase Crashlytics - Enregistrer `AppLogger.onMonitoringReport` 🔐 **Certificate Pinning** (Optionnel - Haute sĂ©curitĂ©) --- ## ⚡ Performance **Documentation complĂšte**: [OPTIMISATIONS_PERFORMANCE.md](docs/OPTIMISATIONS_PERFORMANCE.md) ### Optimisations ImplĂ©mentĂ©es ✅ **Pagination** - Backend: 20 items/page - Mobile: Scroll infini avec lazy loading ✅ **Cache Multi-niveaux** - L1: MĂ©moire (instant) - L2: Disque (persiste aprĂšs redĂ©marrage) - TTL configurables (1min - 1h selon type de donnĂ©es) - Cache-aside pattern avec `CachedDatasourceDecorator` ✅ **Network** - Debounce recherche (300ms) - Cached network images - Chargement parallĂšle (`Future.wait`) ✅ **UI** - ListView.builder (lazy loading) - Const constructors partout - Shimmer loading states ### RĂ©sultats | MĂ©trique | Avant | AprĂšs | Gain | |----------|-------|-------|------| | Chargement dashboard | ~4s | <1s (cache) / ~2s (sans cache) | **75-50%** | | Scroll 1000+ items | 30-40fps | **60fps** | **100%** | | Recherche | Lag visible | InstantanĂ© | **N/A** | --- ## đŸ§Ș Tests ### Tests Unitaires ```bash flutter test ``` ### Tests d'IntĂ©gration ```bash flutter test integration_test/ ``` ### Tests E2E (Device/Emulator) ```bash flutter drive --target=test_driver/app.dart ``` ### Coverage ```bash flutter test --coverage genhtml coverage/lcov.info -o coverage/html ``` --- ## 📚 Documentation | Document | Description | |----------|-------------| | [ARCHITECTURE.md](docs/ARCHITECTURE.md) | Architecture Clean + BLoC dĂ©taillĂ©e | | [SECURITE_PRODUCTION.md](docs/SECURITE_PRODUCTION.md) | Mesures de sĂ©curitĂ© complĂštes | | [OPTIMISATIONS_PERFORMANCE.md](docs/OPTIMISATIONS_PERFORMANCE.md) | Optimisations et cache | | [CONTRIBUTING.md](CONTRIBUTING.md) | Guide de contribution | | [CHANGELOG.md](CHANGELOG.md) | Historique des versions | --- ## 🔧 DĂ©veloppement ### Hot Reload Flutter supporte le hot reload pour le dĂ©veloppement rapide: ```bash # Appuyer sur 'r' pour hot reload # Appuyer sur 'R' pour hot restart # Appuyer sur 'q' pour quitter flutter run --dart-define=ENV=dev ``` ### Debug Mode ```bash # Activer les logs verbeux flutter run --dart-define=ENV=dev --verbose # Performance overlay flutter run --dart-define=ENV=dev --profile ``` ### Code Generation (Watch Mode) ```bash # Auto-gĂ©nĂ©ration au changement de fichier flutter pub run build_runner watch ``` ### Linting ```bash # Analyse statique flutter analyze # Formatage code flutter format lib/ ``` --- ## 🚀 DĂ©ploiement ### Google Play Store (Android) 1. **Build AAB**: ```bash flutter build appbundle --release --dart-define=ENV=prod ... ``` 2. **Signer l'APK** avec le keystore de production 3. **Upload sur Google Play Console**: - Internal testing → Closed testing → Open testing → Production 4. **Remplir Store Listing**: - Screenshots, description, icĂŽne, etc. ### Apple App Store (iOS) 1. **Build IPA**: ```bash flutter build ipa --release --dart-define=ENV=prod ... ``` 2. **Ouvrir Xcode**: ```bash open ios/Runner.xcworkspace ``` 3. **Archive & Upload** via Xcode Organizer 4. **App Store Connect**: - TestFlight → App Review → Release --- ## 📄 Licence **PropriĂ©taire** - Lions Club CĂŽte d'Ivoire Tous droits rĂ©servĂ©s. Toute utilisation, modification ou distribution sans autorisation est strictement interdite. --- ## đŸ‘„ Équipe **UnionFlow Development Team** Lions Club CĂŽte d'Ivoire - District 403 A1 --- ## 📞 Support Pour toute question ou problĂšme: - 📧 Email: support@lions.ci - 🌐 Website: https://lions.dev - đŸ“± WhatsApp: +225 XX XX XX XX XX --- ## 📊 Statistiques ![Flutter](https://img.shields.io/badge/Flutter-3.5.3-02569B?logo=flutter) ![Dart](https://img.shields.io/badge/Dart-3.5.3-0175C2?logo=dart) ![Architecture](https://img.shields.io/badge/Architecture-Clean%20%2B%20BLoC-green) ![Performance](https://img.shields.io/badge/Performance-60fps-success) ![Security](https://img.shields.io/badge/Security-OWASP%20Compliant-blue) ---
**Version actuelle**: 1.0.0 **DerniĂšre mise Ă  jour**: 2026-03-15 **Status**: ✅ Production Ready *Made with ❀ by Lions Club CĂŽte d'Ivoire*