AYLICRÉA Il tuto
AYLICRÉA

Tuto Site

Posizione stack / pop

pos n’est pas un offset CSS universel. C’est quatre insets Flutter Positioned.left/right/top/bottom. Lu seulement si parent id_page_stack (inStack) ou view pop: 1 racine. Widget : PositionedWidget → AnimatedPositioned. Mount : onion.dart si popView || inStack — sinon pos est mort.

Qui monte PositionedWidget

CasFlagZone % / −1
Overlay pageShowPageSite popView: true (pop: 1 racine)_zoneWidth = forceWidth. _zoneHeight = hauteur mesurée de la page
Enfant stack CMSparent id_page_stack passe inStack: truezone = LayoutBuilder du folder (après SizeGate + pad parent)
Flow wrap/row/columnaucunpos ignoré

pop: 1 et uuid_folder rempli : le view n’est pas racine → jamais dans les zones pop → pos mort. Overlay = racine uuid_folder: "". Layer 0 + pop = PopDown ; layer > 0 + pop = PopUp (live souvent layer: 1).

JSON — Coordinate, défaut px, sans fallback e→i

{
  "pos": {
    "l": {
      "iL": 16, "eL": 16, "iTL": "px", "eTL": "px",
      "iT": 16, "eT": 16, "iTT": "px", "eTT": "px"
    }
  }
}

Init vs enable — loi production n°1

ViewDataSize : e absent → i. ViewDataCoordinate.getEnable : retourne enableLeft tel quel, sans copier initLeft.

PositionedWidget : enablePos = !(timeBeforeOpen || timeStartClose). Si time_start et time_end == 0 → enablePos true tout de suite → clés e* seulement.

TickerQuelle clé JSON
time_start et time_end == 0e* seulement
avant time_starti*
entre start et ende*
après time_endi* (souvent hide)
Piège n°1. Sans time_start, PositionedWidget lit e* seulement. iL:16 seul → left null → le view se cale sur direction_align du stack, pas à 16 px. Toujours dupliquer i* et e*.

Null / 0 / deux côtés — contrat Flutter

Côtés HLargeur du slot Positioned
left ou right seul (l’autre null)= largeur du child
left et right non-null= zoneW - left - right (étire, ignore width du view)
left et right nullchild hug, posé selon Stack.alignment (direction_align)
  • Fill : les 4 côtés à 0 → le slot = tout le stack. Ne pas fill pour un bouton 200 px en bas-centre : center: 1 + iB: 24 seulement.
  • Coin : iT: 16, iL: 16 uniquement (pas iB/iR) → child garde sa boîte.
  • Bandeau bas stretch : iL: 0, iR: 0, iB: 0 (top null) + height px.
  • Width JSON écrasé par left+right. width: 200px ET iL: 0, iR: 0 = stretch, pas 200 px.

Sentinelle -1 — hors écran = -sizeInit

Ce n’est pas le <0 des sizes (100 % zone). pos.iL: -1 → posLeft = -widthInit (un cran pile à gauche). Idem top → -heightInit. Un pos.iL: -2 n’est pas hors écran : c’est −2 px.

"pos": {
  "l": {
    "iT": -1, "eT": 40,
    "iTT": "px", "eTT": "px"
  }
},
"time_start": 200,
"time": 600,
"time_end": 0

0–200 ms : top = -heightInit (snap). ≥ 200 ms : top = 40, duration = 600 ms → slide. Pas de ticker : -1 init seul n’est jamais lu. Hide statique : "eT": -1.

center (ViewDataInt, pas pos)

Si center.auto(enable) == 1 → left = right = (zoneW - widthInit) / 2. Écrase pos left et right. i: 1 sans e: 1 + pas de ticker → pas centré.

"center": { "l": { "i": 1, "e": 1 } },
"pos": { "l": { "iB": 24, "eB": 24, "iTB": "px", "eTB": "px" } },
"width": { "l": { "i": 200, "iT": "px" } }

Bouton 200 px, centré H, 24 px du bas. Ne pas ajouter iL/iR.

Recettes

Badge 16 px, coin haut-droit :

"uuid_folder": "<STACK>",
"width": { "l": { "i": 48, "iT": "px" } },
"height": { "l": { "i": 48, "iT": "px" } },
"pos": {
  "l": {
    "iT": 16, "eT": 16, "iTT": "px", "eTT": "px",
    "iR": 16, "eR": 16, "iTR": "px", "eTR": "px"
  }
}

Overlay page sticky bas (pop) — uuid_folder vide :

"pop": 1, "layer": 1, "uuid_folder": "",
"center": { "l": { "i": 1, "e": 1 } },
"pos": { "l": { "iB": 16, "eB": 16, "iTB": "px", "eTB": "px" } }

10 % depuis la gauche du parent stack :

"pos": { "l": { "iL": 10, "eL": 10, "iTL": "%", "eTL": "%" } }

dx/dy ne passent pas par PositionedWidget (consommateur = animated_forward). pad est dans l’onion, après Positioned : le slot pos est la boîte externe.

T17 : seulement iL:16 → eL null → left null → PAS 16 px. iL+eL:0 et iR+eR:0 → stretch, width JSON ignoré. pop:1 + uuid_folder set → pas racine, pos mort. % vertical sur stack height: 0 = instable.