@Tazooou Je n’ai jamais réussi à utiliser un GestureDetector dans un widget séparé :
en mettant le navigator directement dedans je pense que ca ne marche pas (car il manque le context je pense).
j’avais une tentative en ajoutant un paramètre dans mon widget, puis en essayant d’appeler le navigator au moment de la constructon du Widget dans la vue finale.
class MyWidgetr extends StatelessWidget {
Function myFunctionForGestureDetector;
MyWidget({super.key, required this.myFunctionForGesture});
Mais la encore j’ai rencontré peu de succès dans mes essais…
Du coup je laissais le GestureDetector directement dans la vue finale autour du widget… c’est pas vraiment une solution mais bon.
La solution de @Xababa_Dalabama est la meilleure selon moi si ton widget est réutilisable :
Tu ajoutes une propriété de type Function (aussi appelé closure ou lambdas dans les autres langages) à ton Widget. Tu peux l’appeler onGestureDetected par exemple.
Dans le onTap de ton GestureDetector, tu appelles cette closure
De l’extérieur, ton widget ressemblera à un bouton :
Ok, je crois comprendre le fonctionnement maintenant
L’info du tap dans le widget va être remonté jusque dans la vue et c’est la vue principale qui déclenche la navigation plutôt que le widget.
J’essaie tout ça et je vous tiens informé !!
Merci beaucoup @mbritto et @Xababa_Dalabama pour votre aide et vos éclairages
Je rencontre tout de même un soucis, en implémentant ca sur un de mes widget : malgré le fait qu’aucun bug ne soit détecté, quand je clique sur mon widget dans l’émulateur, il ne détecte pas le onTap …
As tu le même problème ?
J’ai un peu bossé sur le sujet aujourd’hui. J’étais persuadé que le problème venait du « onTap ». Je ne voyais pas de passage dans cette ligne de code avec le debugger. Mais au final, juste en posant un print avant la fonction, je me suis aperçu que le clic utilisateur était bien détecté.
onTap: () {
print("On tap");
onTapFonction;
},
Restarted application in 327ms.
flutter: On tap
Le problème doit venir de la fonction, je continue de creuser demain !