Async
Async
Engine\Native\Async est le FutureBuilder de Flutter, mais adossé au vrai processus en arrière-plan d'AsyncTask plutôt qu'à une Future Dart. À chaque rendu, il interroge AsyncTask::poll() pour l'état courant de la tâche : en attente, il peint $loading (typiquement un Spinner) et demande au client de rafraîchir ce même écran sous peu (Canvas::pollAgain()) — aucune navigation, aucune action utilisateur, juste "revérifie bientôt" ; une fois terminé, il peint $builder($data) ; en cas d'erreur, un simple message d'erreur.
Exemple
<?php
use Engine\Native\Async;
use Engine\Native\Spinner;
use Engine\Native\Text;
$weather = new Async(
taskKey: 'weather-cotonou',
handlerClass: WeatherFetcher::class,
handlerMethod: 'fetch',
args: ['Cotonou'],
loading: new Spinner(diameter: 24.0),
builder: fn (array $data): Text => new Text("{$data['temp']}°C — {$data['label']}"),
pollIntervalMs: 500,
);Tant que WeatherFetcher::fetch('Cotonou') n'a pas terminé en arrière-plan, un petit spinner s'affiche et l'écran se rafraîchit tout seul toutes les 500 ms ; une fois le résultat prêt, le texte de la météo remplace le spinner sans action de l'utilisateur.
Constructeur
| Paramètre | Type | Défaut | Description |
|---|---|---|---|
| taskKey | string | — | Identifiant stable de la tâche, utilisé pour retrouver son fichier de résultat/verrou. |
| handlerClass | string | — | Classe portant la méthode statique à exécuter en arrière-plan (référence nommée, jamais une closure). |
| handlerMethod | string | — | Nom de la méthode statique de handlerClass à appeler. |
| args | array<int, mixed> | — | Arguments positionnels JSON-safe transmis au handler. |
| loading | Widget | — | Contenu peint tant que la tâche est en attente. |
| builder | callable(mixed): Widget | — | Construit le widget final à partir des données une fois la tâche terminée. |
| pollIntervalMs | int | 400 | Intervalle entre deux rafraîchissements tant que la tâche est en attente. |
À savoir.
$argsdoit être JSON-safe (voirAsyncTask) — pas de closures, pas d'objets sans forme sérialisable ; le handler est toujours invoqué commeClassName::method($args...)parpublic/async-runner.php, jamais par introspection d'une closure.