Skip to content

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
<?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ètreTypeDéfautDescription
taskKeystring—Identifiant stable de la tâche, utilisé pour retrouver son fichier de résultat/verrou.
handlerClassstring—Classe portant la méthode statique à exécuter en arrière-plan (référence nommée, jamais une closure).
handlerMethodstring—Nom de la méthode statique de handlerClass à appeler.
argsarray<int, mixed>—Arguments positionnels JSON-safe transmis au handler.
loadingWidget—Contenu peint tant que la tâche est en attente.
buildercallable(mixed): Widget—Construit le widget final à partir des données une fois la tâche terminée.
pollIntervalMsint400Intervalle entre deux rafraîchissements tant que la tâche est en attente.

À savoir. $args doit être JSON-safe (voir AsyncTask) — pas de closures, pas d'objets sans forme sérialisable ; le handler est toujours invoqué comme ClassName::method($args...) par public/async-runner.php, jamais par introspection d'une closure.

Voir aussi ​

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