Répondre en français. Limiter les changements strictement à la demande.
Application Flutter / Dart (mobile + web) cliente de l'API TableMaster. Suit un découpage Clean Architecture par feature.
- SDK : Dart
^3.7.0, Flutter (lintsflutter_lints ^5). - HTTP :
dio ^5via un client centralisélib/core/api_client.dart(gère headers, auth, refresh). - DI :
get_it ^9danslib/core/injection.dart. - Stockage sécurisé :
flutter_secure_storage(tokens). - Temps réel :
signalr_netcore. - Notifications :
firebase_messaging+flutter_local_notifications. - Cartes / géoloc :
google_maps_flutter,geolocator. - Divers :
confetti,audioplayers,url_launcher,intl.
lib/
├── main.dart bootstrap
├── splash_screen.dart
├── firebase_options.dart généré par flutterfire configure
├── core/ infra commune
│ ├── api_client.dart Dio centralisé (singleton)
│ ├── app_config.dart config par environnement (dart-define)
│ ├── app_constant.dart
│ ├── injection.dart enregistrements GetIt
│ ├── localisation.dart
│ ├── navigation/
│ ├── notification_service.dart
│ ├── signalr_service.dart
│ ├── session/
│ ├── errors/
│ ├── logging/
│ └── widgets/ widgets partagés
└── features/ découpé par domaine
├── auth/
├── closed_day_exception/
├── daily_activity/
├── home/
├── menu/
├── reservation/
├── restaurant/
├── review/
├── room/
├── table/
└── user/
config/ configs d'environnement (--dart-define-from-file)
├── dev.json
├── android-emulate-dev.json pour émulateur Android (10.0.2.2)
└── prod.json
android/ ios/ web/ windows/ macos/ linux/ plateformes Flutter
Chaque feature suit :
features/<feature>/
├── domain/repositories/ interfaces
├── data/
│ ├── datasources/ appels API / stockage local
│ ├── models/ DTO de transport
│ └── repositories/ implémentations
└── presentation/ pages, écrans, widgets, controllers UI
Flux : presentation → repositories → datasources → ApiClient.
flutter pub get
flutter analyze
flutter test
# Dev
flutter run --dart-define-from-file=config/dev.json
flutter run --dart-define-from-file=config/android-emulate-dev.json # émulateur Android
# Prod
flutter run --release --dart-define-from-file=config/prod.json
flutter build apk --dart-define-from-file=config/prod.json
flutter build appbundle --dart-define-from-file=config/prod.json
flutter build ipa --dart-define-from-file=config/prod.json
# Firebase (regen lib/firebase_options.dart)
flutterfire configure- Base API :
AppConfig.apiUrl + "/api". - Header version :
x-api-version: 1.0. - Clés tokens :
access_token,refresh_token(secure storage). - Toute la logique token / refresh / headers reste dans
ApiClient+ repository auth — ne pas dupliquer. - Si l'API change (route, modèle, statut HTTP, comportement auth) → mettre à jour datasource + modèle + repository concernés.
- Créer
features/<feature>/{domain,data,presentation}/. - Définir l'interface repository (domain) + l'implémentation + datasource + models (data).
- Enregistrer datasource + repository dans
lib/core/injection.dart(même ordre que l'existant). - Réutiliser le singleton
ApiClient— pas de Dio indépendant sauf cas justifié. - UI dans
presentation/, extraire un widget quand la page devient lourde.
- Fichiers
snake_case.dart. - Classes / widgets PascalCase, méthodes/vars camelCase, prefix
_pour le privé. - Textes UI en français, sauf écran déjà conventionné autrement.
- Gérer explicitement les
DioExceptionsur tout appel API. - Préserver les assets déclarés dans
pubspec.yaml(logo, sons) — pas de chemins en dur si une constante existe.
flutter analyzeavant de finir si possible.flutter testsur changements de logique, repositories, auth, API, widgets.- Tests déterministes, pas d'appel réseau réel.
- Ne pas commiter : configs Firebase privées, clés de signature, secrets API, chemins locaux sensibles.
- Ignorer
build/,.dart_tool/,.gradle/, plugins générés, métadonnées IDE. - Ne pas modifier les fichiers de plateforme Android/iOS générés sauf besoin explicite.
AGENTS.md,README.md,CI_CD.md.