# manager-app Interface de gestion de contenu Flutter (web/desktop) pour configurer `tablet-app` et `mymuseum-visitapp`. ## Stack - Flutter web (cible principale), support desktop partiel - State management : **Provider** + `ChangeNotifier` - Navigation : **GoRouter** - Firebase Storage (upload de ressources) ## Structure ``` lib/ ├── main.dart # Entry point, init Firebase, GoRouter, breakpoints responsive ├── app_context.dart # Provider root wrapping ManagerAppContext ├── client.dart # Wrapper exposant les 12+ facades API générées ├── constants.dart # Couleurs, types de sections, langues, types de ressources ├── Models/ # ManagerAppContext (état central), Session, Menu... ├── Helpers/ # FileHelper (localStorage session), PDFHelper ├── Components/ # 48+ widgets réutilisables (inputs, pickers, players...) └── Screens/ # Écrans par domaine ├── Main/ # Dashboard principal avec menu latéral ├── Configurations/ # Builder de configuration par type de section │ └── SubSection/ # Map, Menu, Slider, Quiz, Article, PDF, Video, Weather, Event, Parcours, Game, Agenda ├── Resources/ # CRUD ressources (Image, Video, Audio, PDF, JSON...) ├── Applications/ # Liaison config ↔ app device ├── Kiosk_devices/ # Gestion des devices ├── Users/ # Gestion des utilisateurs ├── ApiKeys/ # Gestion des clés API ├── Notifications/ # Push notifications └── Statistics/ # Analytics visiteurs ``` ## Client API généré (manager_api_new/) **C'est ici que le client est généré.** Il est consommé via dépendance locale par `tablet-app` et `mymuseum-visitapp`. - **Ne pas modifier manuellement** les fichiers dans `manager_api_new/` - Régénérer via OpenAPI generator quand le backend change : `openapi_generator_config.json` à la racine - 16 classes API : AuthenticationApi, ConfigurationApi, SectionApi, SectionMapApi, SectionEventApi, ResourceApi, DeviceApi, UserApi, StatsApi, AIApi, etc. - 130+ DTOs générés dans `manager_api_new/lib/model/` ## État central (ManagerAppContext) Contient : credentials, accessToken, instanceId, instanceDTO, référence au client API, configuration/section sélectionnée. Accès via `context.read()` ou `context.watch()`. ## Flow d'authentification 1. `FileHelper().readSessionWeb()` → localStorage 2. Si pas de session → `/login` 3. POST `/api/Authentication/AuthenticateWithJson` → TokenDTO 4. Init `Client` avec le host backend 5. Fetch `InstanceDTO` → détermine les features (isMobile, isTablet, isWeb, isVR, isStatistic) 6. Redirect vers `/main/:view` ## Breakpoints responsive - Mobile : 0–550px - Tablet : 550–800px - Desktop : 801–1920px - 4K : 1921px+ ## Commandes utiles ```bash flutter run -d chrome # Lancer en web flutter build web # Build web flutter pub run build_runner build # Regénérer code généré ```