comment mettre à jour le widget parent après la fermeture de showDialog dans Flutter?

Nov 29 2020

J'ai un widget avec une icône lorsque je clique dessus, un widget de dialogue s'affiche, voici l'appel pour la boîte de dialogue:

// this icon is in widget parent
           IconButton(
              icon: Icon(
                Icons.info_outline,
                size: mobileWidth * 0.07,
              ),
              tooltip: 'information',
              color: Colors.blueGrey,
              onPressed: () {
                showAlertInfo(context, code);
                setState(() {});
              },
            ),

voici mon dialogue:

showAlertInfo(BuildContext context, String code) {
  showDialog(
    context: context,
    builder: (context) {
      return StatefulBuilder(
        builder: (context, setState) {
          return AlertDialog(
            title: Text(
              "Information sur le client $code", ),
            content: SingleChildScrollView(
               child: Container( ..... 
               /* ...
               this dialog has some operations that changes info 
               values of the widget that called this in first place
               it is a big code to put here*/
             // here I have a close button
                    actions: [
            FlatButton(
            child: Text(
              "Fermer",
              style: TextStyle(
                color: Colors.red,
                fontSize: mobileWidth * 0.035,
                fontWeight: FontWeight.bold,
              ),
            ),
            onPressed: () {
              Navigator.of(context).pop(); // dismiss dialog
            },
          ),
        ],
      );  

ce que j'essaie de réaliser, c'est que lorsque la boîte de setStatedialogue est fermée, je veux que le widget parent soit mis à jour, alors comment appeler le widget parent lorsque le widget de dialogue est fermé?

Réponses

2 TahaMalik Nov 29 2020 at 06:58

Pour la fonction Async

Ajoutez awaitavant showDialog()et appelez setState((){})sur la ligne suivante.

await showDialog(
    context: context,
    builder: (context) {
       return yourWidget;
    }
);
setState((){});

Pour la fonction de synchronisation

Utilisez le .then()rappel et appelez- setState((){})le.


showDialog(
    context: context,
    builder(context) {
        return yourWidget;
    }).then((_){
        setState((){});
    }
);