Bonjour,
En milieu de formation sur le développement d’application en Flutter, je m’attaque au défi de chiffrement de César.
Et je coince sur un Elevated Button, que je n’arrive pas à rendre actif. Il est pourtant bien relié à une fonction. Pourtant si je met la propriété onPressed sur une closure, il s’active.
Il doit y avoir quelque chose qui coince dans mon code, mais cela fait plus de 2 jours que je bloque là-dessus et là je me décourage…
Bon, il me suffisait de poster le message pour voir la lumière ! Je met quand même la solution, peut-être qu’un autre débutant la trouvera utile
Il semble qu’ElevatedButton n’accepte pas de paramètres à passer dans une fonction. J’ai donc trouvé un autre moyen de passer les paramètres et modifié le code de mon bouton :
Voici plus d’explication sur le soucis que tu as rencontré :
Dans ta première version, tu appelles la fonction _cryptMessage au moment où tu crées le bouton et la valeur que tu donnes au parametre onPressed est en réalité le retour de la fonction. Cette fonction ne retourne rien, donc c’est comme si tu avais laissé la propriété onPressed vide.
onPressed attend une fonction en paramètre, et cette fonction ne doit pas elle même recevoir de paramètre. Garde à l’idée qu’elle sera appelée par le bouton lui-même donc il ne saurait pas quels paramètres lui donner. Comme je l’ai dit dans le cours sur Flutter, tu as 2 solutions :
soit déclarer la fonction à l’extérieur et lui donner uniquement le nom de cette fonction. Sans écrire les parenthèses sinon tu appelles la fonction
soit déclarer le code de cette fonction sous la forme d’un lambda : () => ou ’() { }
Dans ton cas ça paraissait être la solution la plus simple :
Merci pour ta réponse Maxime, ta solution est bien plus élégante ! J’aurais dû prendre le temps de visionner à nouveau la vidéo qui explique ce concept… Mais au moins ton explication m’aide un peu à clarifier la notion de lambda, qui reste assez conceptuelle pour moi. Je pense que ce sera plus clair au fur et à mesure de la pratique.
Merci