Site-Tutorial
In-situ-Bearbeitung
Pas un champ JSON. Overlay panel si ShowPageSite.editMode == true (écran panel p_site_content, preview page). Public : absent (peintre deferred edit_deferred.dart, package viewEdit). Ce n’est pas le pos CMS : le crayon s’ancre via GlobalKey + localToGlobal.
Auteur panel
toolbar Icons.radio_button_checked_outlined → SiteContentP.editButton
toolbar Icons.grid_4x4_outlined → SiteContentP.editGrid
toolbar Icons.location_on → SiteContentP.editPosition
ShowPageSite(editMode: true, editGrid, editButton)
├─ chaque ViewPreView
│ onion : 2× PosRectPainter (grille / zone rouge)
│ Container(key: keyWidget) ← ancre mesure
└─ Positioned.fill → PosButton
editButton → PosButtonEdit (crayon Icons.edit)
editPosition → PosAction (poignée pos/taille, selected only)
Trois flags, trois overlays
| Flag | Toolbar | Icône | Effet |
|---|---|---|---|
editButton | Voir bouton | radio_button_checked_outlined | un crayon par view visible, ancré GlobalKey (pas pos CMS) |
editGrid | Voir grille | grid_4x4_outlined | rectangles sur tous les views — selected = error 3 px |
editPosition | Voir bouton position | location_on | poignée drag pos/size, selected only |
Ancre GlobalKey
La clé est après pad/rota/Positioned CMS : elle mesure la boîte interne (contenu), pas le pad externe. Si offset == null → pas de crayon.
| Type view | Ancrage |
|---|---|
| Folder / complex | crayon en haut (topLeft / topRight, flip pair/impair) |
| Leaf (text, button, image) | crayon à mi-hauteur du bord (centerLeft / centerRight) |
byPassFolder: true = tous les views de la page (racines et enfants). Un titre dans une column a son propre crayon. flip: i % 2 == 0 alterne gauche/droite.
Deux clics
- View non sélectionné → panel
selectedElementURL: content.uuid. - View déjà selected → popup
ParamButton280 px (pastillestext_fields,perm_media, style, visibilité…).
Deux cadres onion
PosRectPainter deux fois : externe = avec pad (zone externe, alpha 100) ; interne = sans pad (contenu = ancre crayon). Non-selected stroke 0 / onSurface. Selected = error 3 px. editGrid false : painters sautés — pas de rouge.
{
"uuid": "<unique>",
"uuid_page": "<P>"
}
editMode.