Tuto Site
Onion de colocação
Le leaf (id_text, id_image, id_button…) ne re-pad pas, ne se Theme pas, ne se Positioned pas. L’onion (lib/site/widget/view/core/onion.dart) l’a déjà fait. Ajouter un Padding « pour être sûr » double l’espace.
Ordre build — extérieur → intérieur
1 id_copy + uuid_copy valide
→ NOUVELLE ViewPreView (rewrite) — onion du nœud copy SAUTÉE
2 overflow image inStack (uuids hardcodés)
→ ClipRect > OverflowBox (rare)
3 popView || inStack
→ PositionedWidget ← JSON pos / center / time_*
4 rota.auto(false) ≠ 0
→ RotationTransition(turns:) ← JSON rota (1 = 360°)
5 Padding
← JSON pad (zone _zoneWidth/_zoneHeight, isEnable = preEnable)
6 editGrid → PosRectPainter (externe = avec pad, interne = sans)
7 Container(key: keyWidget) ← ancre crayon édition
8 Theme(colorScheme: colorContext(uuid_theme))
← JSON uuid_theme ViewDataString
9 viewWidget() SizeGate + type dispatch
← width/height, type, title, image, uuid_action, pad_int, …
not_apply_constraint: true (re-entrée id_text chrome) : saute pad et rota.
isEnable onion = StyleThemeContentP.s.preEnable (session), pas content.enable (déjà filtré avant montage).
Zone utilisée par pad / pos / %
_zoneWidth = maxWidth == infinity ? P.size.mainW : maxWidth _zoneHeight = maxHeight == infinity || == -1 ? P.size.appH : maxHeight
- Racine flow :
maxWidth = forceWidth,maxHeightsouvent infinity → pad vertical % = % hauteur écran, pas hauteur page. - Pop :
maxHeight= hauteur mesurée page. - Enfant folder : constraints LayoutBuilder parent.
SizeGate (après theme)
| Helper | Qui | JSON |
|---|---|---|
sizeFolderDeco | FolderBasic | width/height flexible + customDecoration |
sizeFixe | image, vidéo | width et height calculés — box_fit dans cette boîte |
sizeWidth | circle, text_animated | width only |
sizeWidthFlexible | button | width 0 → hug |
sizeAnimatedDeco | space, page nested | + blur si blurIfNotLeve |
Size 0 → null SizedBox (hug). Size < 0 déjà converti en 100 % zone avant SizeGate.
Ce que le leaf lit encore (légitime)
| Champ | Où |
|---|---|
title style_title | Segment / wrap_text spans / ButtonSite |
pad_int | bouton, segment, image_deco |
uuid_gradient | wrap_text span ShaderMask ; folder déjà dans deco |
uuid_action | onTap setAction |
image box_fit | ServerImage |
axis_align | folder engine et wrap_text textAlign et Segment wrap |
{
"pad": { "l": { "iT": 24, "iB": 24, "iL": 0, "iR": 0, "iTT": "px", "iTB": "px" } },
"pos": {},
"rota": {},
"uuid_theme": { "l": { "i": "f81ad0b2-fc67-45a8-aff9-f48d608d5f95" } }
}
Piège. Le JSON pose
pad / pos / rota / uuid_theme. Le leaf ne les re-pose pas. Pas : pad, pos, uuid_theme dans le widget typé — sauf Segment qui re-lit border/radius pour son BoxDecoration (decoration: true).