diff --git a/lib/widgets/controllable_loads_section.dart b/lib/widgets/controllable_loads_section.dart index 2bc84c6..4a312ae 100644 --- a/lib/widgets/controllable_loads_section.dart +++ b/lib/widgets/controllable_loads_section.dart @@ -126,6 +126,29 @@ class _ControllableLoadsSectionState extends State { // Conséquence attendue : on ne réordonnerait que ce qui tient à l'écran **en même // temps**. Un déplacement plus long que la fenêtre n'aboutirait pas. // + // **La géométrie, mesurée sur le banc le 2026-09-08** (Redmi Note 9S, 3 domaines, + // 4 charges, tous les blocs dépliés) — hauteurs relevées à `uiautomator` : + // + // viewport de la liste 1 912 px + // Véhicule électrique (2 charges) 1 355 px + // Eau chaude sanitaire (1 charge) 1 171 px + // Chauffage (1 charge) 1 029 px + // + // Le doigt doit parcourir la hauteur de CHAQUE bloc qu'il dépasse — la liste + // se réordonne au passage, mais le proxy reste sous le doigt. + // + // échange de deux blocs VOISINS au pire 1 355 px < 1 912 → passe + // remonter de DEUX rangs d'un coup 2 526 px > 1 912 → impossible + // + // Donc le défaut est **déjà atteignable aujourd'hui**, à quatre charges — mais + // seulement sur un déplacement de deux rangs en un seul geste, et il se contourne + // par **deux échanges voisins successifs**. C'est ce qui le rend peu grave, pas + // son inaccessibilité. + // + // ⚠️ Le seuil ne se compte donc pas en nombre de charges : il se compte en pixels, + // et une charge de plus dans un domaine déjà servi ne coûte pas la même chose + // qu'un domaine de plus. + // // **Le protocole en trois gestes**, si la plainte arrive un jour : // // A — replier tous les blocs (le chevron), puis remonter une plage par-dessus @@ -142,7 +165,15 @@ class _ControllableLoadsSectionState extends State { // **Contournement** : replier les blocs — tout tient alors à l'écran. // // **Remède**, s'il faut y venir : UN seul `Scrollable`, en `CustomScrollView` + - // `SliverReorderableList` — le montage déjà en place dans `favorites_screen.dart`. + // `SliverReorderableList`. + // + // ⚠️ `favorites_screen.dart` utilise bien ce couple — mais ce n'est **pas** un + // précédent transposable, et le citer comme tel ferait sous-estimer le travail. + // Là-bas la liste réordonnable est plate, homogène, et posée directement dans les + // slivers de l'écran. Ici elle est **deux composants plus bas** : il faudrait que + // `ControllableLoadsSection` cesse de rendre une `Column` pour émettre des slivers + // (`SliverMainAxisGroup`), donc changer le contrat du widget et convertir tout le + // corps de `roles_devices_screen`. Un montage à écrire, pas un montage à copier. // // Et pourquoi aucun test ne tranchera : l'entrée synthétique ne reproduit pas un // appui-glissé (cf. `tools/rpc/README.md`). Aucun test de ce dépôt ne peut montrer