# Laverie Mobile Application **native** Android et iOS pour Laverie Connectée — consultation des laveries, portefeuille, réservations et lavages. > **Pas de cible web Flutter.** Le back-office web est géré séparément (Laravel + Inertia). Cette app est mobile-first : **Android en priorité**, **iOS prévu** dès le départ (même codebase). ## Prérequis | Outil | Android | iOS (plus tard) | |-------|---------|-----------------| | Flutter SDK 3.2+ | Oui | Oui (sur macOS) | | Android Studio + SDK | Oui | — | | Xcode | — | Oui (macOS uniquement) | | Backend API | [../README.md](../README.md) | idem | ## Installation (première fois) Le dépôt contient le code Dart (`lib/`) mais pas les dossiers natifs. Générez **Android + iOS uniquement** : ### Windows (PowerShell) ```powershell cd mobile .\scripts\bootstrap_platforms.ps1 ``` ### macOS / Linux ```bash cd mobile chmod +x scripts/bootstrap_platforms.sh ./scripts/bootstrap_platforms.sh ``` Équivalent manuel : ```bash flutter create . --org fr.laverie --project-name laverie_mobile --platforms=android,ios flutter pub get ``` Ne pas ajouter `--platforms web` : le web Flutter est hors périmètre. ## Lancement Android (priorité) ```bash # Émulateur Android (API par défaut : 10.0.2.2 = localhost hôte) flutter run -d android # Appareil physique — remplacer par l'IP de votre PC flutter run -d android --dart-define=API_BASE_URL=http://192.168.1.10:8000/api/v1 ``` ### HTTP en développement L'émulateur Android autorise le trafic HTTP clair vers `10.0.2.2` via la config réseau de debug. En production, l'API doit être en **HTTPS**. ## iOS (préparation) Le même projet inclut le dossier `ios/` pour une future build App Store. Nécessite **macOS + Xcode**. ```bash # Simulateur iOS (localhost) flutter run -d ios # Appareil physique flutter run -d ios --dart-define=API_BASE_URL=http://192.168.1.10:8000/api/v1 ``` Points déjà prévus côté Dart : - `flutter_secure_storage` avec options Keychain iOS - URL API par défaut `127.0.0.1` sur iOS simulateur - Détection plateforme dans `lib/core/platform/app_platform.dart` ## Configuration API | Contexte | URL API | |----------|---------| | Android émulateur | `http://10.0.2.2:8000/api/v1` (défaut) | | iOS simulateur | `http://127.0.0.1:8000/api/v1` (défaut) | | Appareil physique | `--dart-define=API_BASE_URL=http://IP:8000/api/v1` | ## Compte de démonstration | Email | Mot de passe | |-------|--------------| | marie.dupont@demo.local | password | ## Architecture ``` lib/ ├── main.dart # Garde anti-web / anti-desktop ├── core/ │ ├── platform/ # Android / iOS uniquement │ ├── config/ # API URL, secure storage │ ├── api/ │ ├── auth/ │ ├── router/ │ └── theme/ └── features/ ├── auth/ ├── home/ ├── establishments/ ├── wallet/ ├── booking/ ├── wash/ └── profile/ ``` ## Prochaines étapes (Android) 1. Scan QR machine (`mobile_scanner`) → `POST /washes/start` 2. Rechargement wallet simulé 3. Notifications push (FCM Android, APNs iOS plus tard) 4. Tests `integration_test` sur émulateur Android