C'est le voisin le plus proche de la liste. Flutter décrit lui aussi une interface comme une fonction de l'état, la reconstruit lui aussi, et dessine lui aussi chaque pixel plutôt que d'utiliser les contrôles de la plateforme. Si vous venez de Flutter, l'essentiel de ce que vous savez se transpose et les surprises portent sur l'échelle, pas sur la forme.
| Flutter | keal-view |
|---|---|
Text('Hi') | label("Salut") |
ElevatedButton(onPressed: …) | button("Go", { -> … }) |
Column / Row | column([…]) / row([…]) |
Expanded / Flexible | .grows() / .shares() |
Padding(padding: …) | .padAll(…) / .pad(…) |
CustomPaint + CustomPainter | custom({ p -> … }) |
setState / ValueNotifier | state(0) et .set(…) |
Stack + Positioned | stack([…]) et .at(x, y) |
Flutter garde un arbre d'éléments à côté de l'arbre de widgets et les réconcilie, et c'est là que les clés gagnent leur place. Ici l'arbre est simplement reconstruit et jeté, et la seule chose qui survit est l'état par nœud — survol, focus, défilement, curseur — rangé par position dans l'arbre. Donnez .keyed("…") à un nœud et il garde son curseur quand on supprime une ligne au-dessus ; laissez-le sans clé et il ne le garde pas.
Le pipeline de rendu de Flutter est vaste, en couches, et opaque en pratique. Ici le rasteriseur est canvas.keal, les polices sont font.keal, et la boucle est le bas de app.keal. Quand un glyphe a l'air faux, on peut ouvrir le fichier qui l'a dessiné.
Flutter entretient un ticker et repeint à la synchronisation verticale. keal-view bloque jusqu'à ce que le système parle, et une fenêtre au repos n'utilise aucun processeur. Le prix, c'est qu'il n'y a pas encore d'animation au-delà d'un curseur qui clignote : animations implicites, courbes et contrôleurs n'ont pas d'équivalent ici.