ShowDialog, widgt et fonction en paramétre

Bonjour,

Je souhaite créer une fenêtre popup qui demande à l’utilisateur s’il souhaite vraiment se déconnecter.
Le problème que je rencontre est sur la partie la plus simple : faire le bouton Cancel qui ferme simplement la popup : ici mon « Stay Log in ».

Pour organiser mon code je préfèrerai créer dans un fichier séparé la view du ShowDialog :
image

Le code dans ma page accountview pour créer la pop up :

Future _showPopUpDisconnectConfirmation() => showDialog(
      context: context,
      builder: (context) => SimpleDialog(
            backgroundColor: Colors.transparent,
            children: [
              DisconnectionPopUp(
                staylogfunction: () {
                  Navigator.pop(context);
                },
                logoutfunction: () {},
              ),
            ],
          ));

Le widget dans mon fichier popupdisconnection.dart :

class DisconnectionPopUp extends StatefulWidget {
  final void staylogfunction;
  final void logoutfunction;

  const DisconnectionPopUp({
    super.key,
    required this.logoutfunction,
    required this.staylogfunction,
  });

  @override
  State<DisconnectionPopUp> createState() => _DisconnectionPopUpState();
}

class _DisconnectionPopUpState extends State<DisconnectionPopUp> {
  
// plein de variables

  @override
  Widget build(BuildContext context) {
    return Container(
      // du code ....
      child: Column(
      // du code ....
                ElevatedButton(
                  onPressed: () {
                    widget.staylogfunction;
                  },
                  child: Text(_textCancel),
                  style: ElevatedButton.styleFrom(
                    backgroundColor: _colorCancelButton,
                  ),
                ),
                ElevatedButton(
                  onPressed: () {
                    widget.logoutfunction;
                  },
                  child: Text(_textDisconnection),
                  style: ElevatedButton.styleFrom(
                    backgroundColor: _colorDisconnectionButton,
              // On ferme toutes les parenthèses
}

Et donc mon Navigator.pop(context) dans ma fonction paramètre stayLogFunction ne ferme pas la pop up :frowning:

Si quelqu’un sait ce qui cloche ce serait super :slight_smile:

Salut @Xababa_Dalabama !

J’ai bien l’impression qu’avec ton code, Flutter voudra détruire le context de ton widget DisconnectionPopUp . Ce que je ferrais c’est que je renommerai le context de ton builder SimpleDialog par contextDialog par exemple et je le passerais en paramètre de la fonction pop(). Afin qu’il ne puisse pas mélanger les deux.

1 « J'aime »

Merci @AntoLhn je vais tester !

As tu réussis à corriger ton problème @Xababa_Dalabama ? :slight_smile:

1 « J'aime »

Hello @AntoLhn ! Toujours pas :stuck_out_tongue: j’ai fais un test mais peu fructueux donc j’ai toujours une pile de widget dans ma page.
Cette histoire de context n’a jamais était bien clair pour moi (je crois que j’avais déjà posé une question a ce sujet y a un moment) :stuck_out_tongue:
Si tu as un article explicatif sur le sujet je le lirai avec attention !

1 « J'aime »

Hello @Xababa_Dalabama ,

Je n’avais pas fait bien attention mais tu utilises un SimpleDialog . C’est un widget destiné à afficher que du text et qui se ferme en cliquant sur l’arrière plan.
Source : SimpleDialog

Tu devrais plutôt utiliser le widget AlertDialog . Celui-ci te permet d’avoir des boutons d’actions pour exécuter les fonctions de ton choix, comme par exemple ici, fermer ton context :slight_smile:
Source : AlertDialog

1 « J'aime »

@AntoLhn et avec l’utilisation d’un Dialog() simple tu penses que ca fonctionne ?

Je pense que oui car tu est libre de faire ce que tu veux dans un Dialog. Il y a pas de règle de construction.
Essaie car je suis pas sûr à 100% mais dans la logique sur la doc je dirais que c’est possible.

Hello @AntoLhn : a priori ça marche ! J’ai fait une tentative hier qui semble fructueuse :slight_smile:
Merci pour ton aide !

1 « J'aime »