Un flash peut en ouvrir un autre, lui passer des paramètres et recevoir une valeur en retour : un flash de paiement, de signature ou de choix d’adresse se réutilise ainsi partout.

Appeler

const result = await flash.call('acme.paiement', { montant: 18450, reference: 'F-2026-09' });
if (result.hasValue) {
  flash.ui.toast(`Paiement ${result.value.statut}`);
}

Pendant l’appel, le flash appelant est suspendu. Le résultat indique si l’appelé a renvoyé une valeur : hasValue est faux si l’utilisateur a quitté avec le bouton retour.

Être appelé

L’appelé lit ses paramètres dans ctx.params et renvoie sa valeur depuis flash.main, ou à tout moment avec flash.exit(valeur).

flash.main(async (ctx) => {
  const { montant, reference } = ctx.params;
  // … afficher, faire payer …
  return { statut: 'accepté', reference };
});

Erreurs

Si l’appelé échoue, l’appelant reçoit une FlashCallError. Traitez-la : une erreur d’appel non traitée arrête toute la pile de flashs et ramène l’utilisateur à l’accueil.

try {
  const result = await flash.call('acme.paiement', { montant: 18450 });
} catch (error) {
  if (error instanceof flash.errors.FlashCallError) {
    flash.ui.toast('Le paiement n’a pas pu aboutir', { level: 'error' });
  } else {
    throw error;
  }
}

Limites

  • Au plus 8 flashs ouverts les uns au-dessus des autres.
  • Un flash déjà ouvert dans la pile ne peut pas être rappelé (pas de boucle).
  • Paramètres et valeur de retour sont des données JSON.