118 lines
3.2 KiB
Markdown
118 lines
3.2 KiB
Markdown
# 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
|