3.9 KiB
issueRef, version, updatedBy, updatedAt
| issueRef | version | updatedBy | updatedAt | ||||
|---|---|---|---|---|---|---|---|
| #170 | 6 |
|
1785311597912 |
#170 — Cadrage UX (2026-07-28)
Statut : nouveau lot, cadrage exploitable, indépendant de #166/#167/#169.
Pourquoi ce n'est pas un doublon de #166/#167/#169
Ces trois tickets couvrent le cas reps-only sans score manuel sur la montre (branche _ActiveContent / _DominantRepsLine dans watch_session_screen.dart, déjà livrée). #170 décrit un autre écran : une étape qui combine type = reps et hasScore en mode manuel (ScoreInputMode.manual) — cette étape bascule sur projection.hasManualScore == true et rend _ManualScoreContent (watch_session_screen.dart:894), un layout entièrement différent qui n'a jamais affiché le nombre de répétitions cible. Vérifié en lecture directe :
_watchManualScoreProjection(lib/application/use_cases.dart:4285-4318) ne connaît que la cible de score (targetValue/targetLabel: 'Cible'), jamaisstep.defaultTargetValue(le nombre de répétitions). Le champ répétitions n'existe nulle part dans cette branche de données._ManualScoreContent.build()(watch_session_screen.dart:907-993) affiche : nom d'exercice, bande étape, puis sitarget != nullune ligne caption"$targetLabel : $target"(ex.Cible : 500), puis le labelSCOREet la ligne +/- score. Rien n'y référencestep.typeni les répétitions.
Donc le constat utilisateur est exact : sur une étape score-libre + répétitions, la montre affiche le score (incrémentable) mais jamais le nombre de répétitions à réaliser pendant ce score — contrairement au cas reps-only (#166/#167) qui, lui, a bien sa donnée dominante dédiée.
Comportement attendu
Réutiliser le gabarit caption déjà en place (_ManualScoreContent, juste au-dessus du label SCORE), sans ajouter de nouvelle ligne ni de nouveau composant :
Pompes tempo
Répétitions : 10 ← nouvelle info, même style que "Cible : 500"
SCORE
− 42 +
♥ 118
- Si l'étape a aussi une cible de score (
targetValuenon nul), joindre les deux informations sur la même ligne, séparées par·— même règle de mutualisation que les chronos secondaires (secondaryTimers.join(' · '), déjà dans ce fichier) :Répétitions : 10 · Cible : 500. Ne jamais empiler deux lignes de caption : une étape à la fois ne doit montrer qu'une seule ligne d'info secondaire au-dessus du score, pour ne pas reproduire la densité déjà corrigée par #161. - Si l'étape n'a pas de cible de score, la ligne devient simplement
Répétitions : 10(remplace l'espace aujourd'hui vide quandtarget == null). - Le score reste la donnée manipulable (boutons −/+ inchangés) : les répétitions ici sont une cible informative, pas un compteur actionnable — pas de bouton de validation à ajouter sur cette ligne (l'étape se termine via le flux existant de fin de score/étape, non modifié par ce ticket).
- Style : reprendre exactement
Theme.of(context).textTheme.bodySmall+ couleur#A7ADBA+fontSize: 11,maxLines: 1,overflow: ellipsis— déjà le style de la ligneCible, aucune nouvelle charte à définir.
Ce qu'il faut pour Architect
Donnée manquante à faire remonter dans _WatchManualScoreProjectionData / WatchSessionProjection : le nombre de répétitions cible de l'étape courante (step.defaultTargetValue quand step.type == ExerciseStepType.reps), à côté du targetValue/targetLabel de score existant. Recommandation : soit un champ dédié (repsTargetValue), soit généraliser la caption en une liste de segments texte assemblés côté UI — au choix d'Architect selon ce qui est le plus cohérent avec le modèle de projection existant. Le rendu attendu (label unique, jointure ·, une seule ligne) est fixé ci-dessus et ne doit pas varier selon l'implémentation choisie.