AYLICRÉA Das Tuto
AYLICRÉA

Site-Tutorial

Layout-Folder

Un folder est un ViewContent dont type ∈ FolderBasic | NoHeight | Animated. Il ne peint pas ses enfants lui-même : pageFolder pose un moteur Flutter, folderChildren re-entre dans ViewPreView. Live : core/folder.dart.

Contrat enfants — table plate

folderView():
  uuid_page == parent.uuid_page
  uuid_folder == parent.uuid
  enable / desktop|mobile / theme / platform / locale / loc_text
  tri odr
  héritage link / uuid_link si vides

Chaque enfant = onion complète, maxWidth/Height = constraints parent. Jamais un tableau children dans le JSON.

Choisir le moteur

BesoinTypeUUIDAlign
Bloc vertical (titre, texte, bouton)id_page_columnaee08b10-4e50-11ee-be56-0242ac120002axis_* (défaut center)
Rangée (icon + texte + chevron)id_page_rowb47d0b2f-47c7-47bf-9ab6-cdc8c9e5f373axis_size: 1 pour spaceBetween
Rangée qui wrap (tags, cards)id_page_wrapbca54f56-4e50-11ee-be56-0242ac120002WrapAlignment via axis_align
Calage x/y, overlay, heroid_page_stackc7596da6-4e50-11ee-be56-0242ac120002direction_align (défaut 5) + pos enfants
Phrase inline highlightsid_wrap_text94ba3c60-6c02-4ecb-8e3d-77a8f7516e91axis_align → TextAlign
Liste scroll verticaleid_page_column_listc63e417e-ec19-11ed-a05b-0242ac120003comme column
Liste scroll horizontaleid_page_row_listc0956a68-ec19-11ed-a05b-0242ac120003comme row

FolderBasic : sizeFolderDeco = Container(width/height flexible + customDecoration). Donc uuid_theme / uuid_gradient / uuid_shadow / border / radius sur le folder = chrome de la section. height: 0 = hug. width: 100% = pleine zone parent.

Theme folder n’est pas hérité sticky par les leaves. Poser uuid_theme sur le folder (chrome surface) et style_title sur les texts. Si le texte doit suivre le folder, poser le même uuid_theme sur le text.

Wrap racine — JSON minimal

{
  "odr": 1,
  "uuid": "<W>",
  "uuid_page": "<P>",
  "uuid_folder": "",
  "layer": 1,
  "pop": 0,
  "type": "bca54f56-4e50-11ee-be56-0242ac120002",
  "type_m": "",
  "width": { "l": { "i": 100, "iT": "%" } },
  "height": { "l": { "i": 0 } },
  "axis_align": { "l": { "i": 2 } },
  "cross_align": { "l": { "i": 2 } },
  "enable": 1,
  "desktop": 1,
  "mobile": 1
}

inStack: false sur wrap/row/column — pos enfants ignoré. type_m: id_page_column si mobile doit empiler au lieu de wrap.

Column 60/90

{
  "type": "aee08b10-4e50-11ee-be56-0242ac120002",
  "width": { "l": { "i": 60, "iT": "%" }, "s": { "i": 90, "iT": "%" } },
  "height": { "l": { "i": 0 } },
  "axis_size": { "l": { "i": 0 } },
  "axis_align": { "l": { "i": 0 } },
  "cross_align": { "l": { "i": 2 } }
}

axis_align: 0 = start (haut). Défaut code 2 = center : poser 0 pour un article. Espace entre enfants : pad top/bottom sur chaque enfant.

Row spaceBetween

"type": "b47d0b2f-47c7-47bf-9ab6-cdc8c9e5f373",
"axis_size": { "l": { "i": 1 } },
"axis_align": { "l": { "i": 3 } },
"cross_align": { "l": { "i": 2 } }

Stack — seul folder où pos enfant est honoré

"type": "c7596da6-4e50-11ee-be56-0242ac120002",
"width": { "l": { "i": 100, "iT": "%" } },
"height": { "l": { "i": 1.777, "iT": "ratio" } },
"direction_align": { "l": { "i": 5 } }

Enfant image fill : 4 côtés pos 0 (init et enable). Sans pos, l’enfant est posé par direction_align (défaut center). Enfant height 0 et pos top+bottom 0 : stretch vertical OK. Enfant height 0 sans pos : hug au centre, peut collapser.

Piège. pos sur un enfant de wrap/row/column : silencieux. Wrap_text n’est pas un wrap de boxes : enfants = TextSpan via folderView(), pas folderChildren.