28 Commits

Author SHA1 Message Date
Thomas Fransolet
7c29b4bb76 K7 et K3 : SectionArticle et SectionEvent sur la borne
flutter build apk --debug vert, APK produit. La borne couvre désormais
12 des 13 types ; seul SectionParcours reste dehors, et définitivement —
un parcours guidé fait marcher le visiteur avec géodéclenchement.

Les deux écrans suivent la maquette paysage validée le 12/08 : ils sont
dessinés pour une dalle large et fixe, pas pour un téléphone debout.

K7 — Article. article_view.dart remplace le stub Text("TODO Article") et
le case est décommenté (l'import d'ArticleView était déjà en tête de
main_view, laissé par celui qui avait écrit le TODO). Rail média à 38 %
avec image, vignettes à plat et audio docké ; colonne de lecture à 62 %
plafonnée à 720 px, parce qu'étirer le texte sur 1280 px le rend
illisible. isContentTop, qui voulait dire « texte au-dessus » en portrait,
devient le côté : à true, texte à gauche et rail à droite.

Trois états incomplets, tous possibles en configuration. Le rail n'existe
que s'il a quelque chose à ancrer : sans audio le dock tombe, sans photo
le rail disparaît et l'audio passe en tête de la colonne, sans rien la
colonne se centre.

L'audio est porté par langue (audioIds est une List<TranslationDTO>) :
pas d'entrée pour la langue choisie, pas de lecteur, sans repli sur une
autre langue. TranslationHelper.get renvoyant "" quand la langue manque,
la règle tombe juste.

K3 — Événement. event_view.dart : bande héros à 26 % au lieu des 52 % de
mymuseum (debout devant une borne, personne ne défile pour découvrir
qu'il y a un programme dessous), programme à gauche avec bloc « en
cours », carte flutter_map vive à droite. Le détail d'un bloc s'ouvre
sous la carte et non en showModalBottomSheet : ce dernier est une réponse
à l'étroitesse, or ici il y a la place à côté.

Quatre choses que le code a dictées :

- La barre de pied de la maquette n'appartient pas à ces écrans.
  section_page_detail la dessine déjà pour les treize types, avec les
  clés back/menu selon isFromMenu. La dessiner aurait affiché deux
  boutons retour.
- Un seul constructeur de marqueurs au lieu des quatre de mymuseum.
  MapAnnotationDTO et MapAnnotation portent des champs rigoureusement
  identiques mais sont deux types Dart distincts. Normalisé par une
  classe interne à deux fabriques — L5 appliqué au front, et il porte
  d'autant plus que la convention [lng, lat] est l'endroit exact où une
  divergence ne lève aucune erreur.
- L'audio d'article se résout dans contents avant l'API. ContentDTO
  porte son resource complet (idiome de marker_view), donc l'audio est
  trouvé sans appel réseau quand il est embarqué, donc hors ligne aussi.
  resourceGetDetail n'est qu'un repli ; mymuseum appelle l'API
  systématiquement en ligne.
- Nouvelle clé i18n event.live dans les 10 langues. Sans les 10,
  getFromLocale renvoie "" et la pastille rendrait une boîte vide.
  ATTENTION : PL, CN, UK et AR sont de ma main et demandent une
  relecture humaine.

Le nouveau code emploie withValues plutôt que withOpacity, déprécié —
le repo est en pleine migration (13 contre 9).

flutter analyze sur Screens/Article, Screens/Event et Helpers : zéro
issue dans les fichiers touchés. Les 2 restantes sont dans MQTTHelper,
préexistantes.

Non prouvé : le rendu. Aucun des deux écrans n'a été vu à l'œil, et un
build vert ne dit rien d'une mise en page. Aucun SectionEvent n'existe
en base, le type étant né avec Postgres v3 — c'est le §19.13 cas E qui
en créera un.

Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
2026-08-12 15:20:08 +02:00
Thomas Fransolet
9f582dd8a7 Lot K : tablet-app reconstruit et rebranché sur le contrat Postgres v3
Premier vrai build depuis avril. Le diagnostic des docs — « un seul défaut,
purement Gradle, peut-être réglé par 5a6701d » — tenait parce que personne
n'avait lancé la commande.

K1 — dix crans d'outillage, chacun dicté par l'erreur du précédent :
Gradle 7.5 → 8.11.1, AGP 7.2.0 → 8.9.1, Kotlin 1.9.0 → 2.3.10,
enableUncompressedNativeLibs retirée (supprimée en AGP 8.1), jcenter → mavenCentral,
heap 1536M → 4096M, Jetifier coupé, et retrait du resolutionStrategy qui forçait
androidx.lifecycle à 2.4.0 « to fix mapbox issue » : il réglait un problème d'il y
a trois ans et causait celui d'aujourd'hui, mapbox_maps_flutter 2.21.1 appelant
setViewTreeLifecycleOwner. Les trois derniers crans étaient de simples alignements
sur mymuseum-visitapp, qui utilise le même plugin sans ces problèmes.

Le bloc buildscript commenté de android/build.gradle est supprimé : il déclarait
une config qui n'était pas celle appliquée et a fait conclure deux fois à tort.

K2 — les 132 erreurs Dart que le Gradle masquait. Trois causes : roundedValue,
isDate, isHour, isSectionImageBackground et screenPercentageSectionsMainPage ont
migré vers AppConfigurationLink ; GeoPointDTO.latitude/longitude sont devenus
geometry ; le reste en découlait. Deux bugs latents trouvés au passage :

- applicationInstanceDTO n'était assigné que si l'instance avait l'IA — il servait
  de drapeau d'assistant. Ce DTO portant désormais les AppConfigurationLink, les
  cinq réglages seraient retombés sur leurs défauts sur MDLF et le Fort, sans
  erreur ni log. Drapeau rendu explicite, en préservant le ET instance × canal.
- ConfigurationDTO.isTablet ayant disparu, le filtre des configurations tablette
  n'avait plus de source : il porte sur les liens du canal AppType.Tablet.

La formule de clé par coordonnées de geo_point_filter, dupliquée à quatre endroits
alors que les deux côtés de l'appariement doivent produire la même valeur, ne vit
plus qu'à un seul (Helpers/geo.dart). Ce fichier documente aussi les deux
conventions de coordonnées du projet : [lng, lat] pour les GeoPoint, [lat, lng]
pour les géométries de GuidedStep.

K4 — l'écran Game repris de mymuseum-visitapp, Screens/Puzzle supprimé. La tablette
gagne le puzzle glissant, le bouton d'indice et un dimensionnement au ratio de
l'image. Les couleurs, codées en dur par flavor client chez mymuseum, sont dérivées
de configuration.primaryColor : tablet-app n'a pas de flavor, un seul APK sert tous
les clients.

Reste à vérifier sur device : le rendu de l'écran Game, et l'écran de sélection de
configuration, qui sera vide si les configurations ne sont pas rattachées au canal
tablette.

Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
2026-08-12 12:18:07 +02:00
Thomas Fransolet
da6ff5177e Add apikey ref + needed to test if ok get apikey after pin code 2026-03-13 17:41:42 +01:00
Thomas Fransolet
0cd2b47211 WIP Version 3.0 2025-05-23 17:07:04 +02:00
Thomas Fransolet
7cffe9db6c Add copy carousel + update many packages.. + linked changes + update price position (geopoint) 2024-06-21 16:40:31 +02:00
Thomas Fransolet
1db1c78538 thumbnail for youtube video 2024-04-19 16:22:26 +02:00
Thomas Fransolet
ef89b623d2 update map view + adapt menu view 2024-04-19 15:20:06 +02:00
Thomas Fransolet
d9efad47f8 WIP geopoints filter on map 2024-04-16 22:54:57 +02:00
Thomas Fransolet
59618c84e0 Layout update + use primary color (wip?) 2024-04-12 17:10:25 +02:00
Thomas Fransolet
fab4eeadc6 OTA (wip) + added qr code in agenda pop up + remove category in agenda 2024-03-21 17:40:41 +01:00
Thomas Fransolet
8d5a0ad1f6 try fix layout 2024-02-28 15:11:57 +01:00
Thomas Fransolet
9eaad8b0cf Fix agenda + weather finetuning 2024-02-28 12:01:56 +01:00
Thomas Fransolet
0559600efc Weather view done + translations 2024-02-27 22:08:17 +01:00
Thomas Fransolet
bda99e384d Download resources at start + use local resources (PDF) + clean code 2024-01-26 23:20:09 +01:00
Thomas Fransolet
387560fad7 Added try catch file access 2024-01-26 16:20:17 +01:00
Thomas Fransolet
cdda7d1470 service generation + wip agenda + cache PDF file 2024-01-26 15:52:25 +01:00
Thomas Fransolet
b32528048e small fix 2023-12-05 15:41:13 +01:00
Thomas Fransolet
0ae552622d Wip add pin for access 2023-12-01 09:09:16 +01:00
Thomas Fransolet
87f1443f0c Update loading + add image configuration if exist + upgrade packages 2023-11-02 13:24:24 +01:00
Thomas Fransolet
67dd1bed91 Update flag to svg, make it works on web (main menu and languages) 2023-01-25 17:52:31 +01:00
Thomas Fransolet
2f67bbe7ac Update dart version + add null safety + add openapi generation with null safety 2023-01-25 15:40:28 +01:00
e6e084a77d Fix MQTT connection if port number in host 2022-03-25 18:24:03 +01:00
Thomas Fransolet
0e73b57312 For apk compilation + icons 2021-08-26 18:50:21 +02:00
Thomas Fransolet
6ede91eed7 Add background color from service + real local db update 2021-08-25 17:22:38 +02:00
Thomas Fransolet
f95b0832b8 Fix mqtt delete issue + show config if no config + update device etc 2021-08-25 16:18:46 +02:00
Thomas Fransolet
ff28b7945a Add mqtt listener + update service generation 2021-07-25 01:50:31 +02:00
Thomas Fransolet
9657240cb0 Add mqtt (as helper) + fix languages config init 2021-07-23 16:46:52 +02:00
Thomas Fransolet
471aa91e8c Add sqlite + get device info when login + WIP map 2021-07-14 20:44:55 +02:00