Skip to content

ClientTabs ​

Onglets

Engine\Native\ClientTabs est la première primitive d'état entièrement côté client du framework. Tout le reste du pipeline de rendu traite chaque interaction comme "recharger tout l'écran depuis PHP", ce qui est correct pour tout ce qui touche un vrai état métier, mais faux pour un changement d'onglet : rien dans le fait de savoir quel panneau est visible n'a besoin de PHP, puisque le contenu de tous les panneaux a déjà voyagé vers l'appareil dans cette même réponse. Tous les panneaux sont mis en page (la taille de ClientTabs est le maximum de celle de chaque panneau, pour que le conteneur ne se redimensionne pas au changement de sélection) et peints dans leur propre Canvas imbriqué. NativeCanvasView.kt garde une carte locale « clé → index sélectionné » (initialisée une fois depuis $initialIndex, jamais écrasée par un rendu ultérieur de la même clé) et ne dessine/hit-teste que le panneau sélectionné — taper sur un en-tête déclenche l'action clientTab:{$key}:{$index}, gérée sans aucun appel réseau.

Exemple ​

php
<?php

use Engine\Native\ClientTabs;
use Engine\Native\Text;
use Engine\Native\Container;

$tabs = new ClientTabs(
    key: 'profile-tabs',
    panels: [
        new Container(new Text('Informations du profil')),
        new Container(new Text('Historique des commandes')),
        new Container(new Text('Paramètres du compte')),
    ],
    initialIndex: 0,
);

Trois panneaux sont envoyés en une seule réponse ; basculer entre eux ne redemande jamais l'écran au serveur — le client bascule instantanément entre les panneaux déjà reçus, y compris hors connexion.

Constructeur ​

ParamètreTypeDéfautDescription
keystring—Identifiant du groupe d'onglets, utilisé pour la carte locale « clé → index » côté client.
panelsWidget[]—Un panneau par onglet, dans l'ordre d'affichage.
initialIndexint0Index du panneau actif au premier rendu ; ignoré par le client aux rendus suivants du même key.

À savoir. Comme la hauteur du conteneur ne change jamais selon l'onglet sélectionné (elle est fixée au maximum de tous les panneaux dès le premier layout), cette primitive ne peut pas exprimer des onglets dont le contenu changerait la mise en page de ce qui suit à l'écran — c'est une limite assumée, pas un bug.

Voir aussi ​

PhpNitro est un produit FINANFA TECH — Publié sous licence MIT.