Salut, j'ai un AlertDialog que je ferme en appuyant sur un bouton mais je veux l'ouvrir à nouveau ou l'ouvrir sur lui-même

ce que je veux, c'est un moyen de l'ouvrir à nouveau sans fermer ou après la fermeture sans cliquer sur aucun bouton voici le code

FutureBuilder<DropDown>(
                future: getDropData(),
                builder: (context, snapshot) {
                  if (snapshot.hasData) {
                    DropDown dropdown = snapshot.data;
                    return Padding(
                      padding: const EdgeInsets.symmetric(horizontal: 40),
                      child: Container(
                        //   width: wide / 12,
                        height: high / 15,
                        child: RaisedButton(
                          color: maincolor,
                          splashColor: accentcolor,
                          onPressed: () {
                            showDialog(
                              context: context,
                              child: AlertDialog(
                                title: Column(
                                  children: [
                                    Padding(
                                      padding:
                                          const EdgeInsets.only(bottom: 12.0),
                                      child: Center(child: Text("احتر القسم")),
                                    ),
                                    Divider(
                                      color: Colors.grey,
                                      thickness: 2,
                                      height: 1,
                                    )
                                  ],
                                ),
                                elevation: 8,
                                backgroundColor: Colors.white,
                                shape: RoundedRectangleBorder(
                                    borderRadius:
                                        BorderRadius.all(Radius.circular(20))),
                                scrollable: false,
                                content: Container(
                                  height: 1000,
                                  width: 400,
                                  child: ListView.builder(
                                    itemCount: dropdown.categories.length,
                                    itemBuilder: (context, index) {
                                      return Padding(
                                        padding: const EdgeInsets.only(
                                            top: 8.0, right: 8, left: 8),
                                        child: Container(
                                          //  width: wide / 4,
                                          decoration: BoxDecoration(
                                            color: Color.fromRGBO(
                                                255, 255, 255, .64),
                                            borderRadius: BorderRadius.all(
                                                Radius.circular(12)),
                                          ),
                                          child: Column(
                                            children: [
                                              FlatButton(
                                                  //color: maincolor,
                                                  onPressed: () {
                                                    setState(() {
                                                      categoryID = dropdown
                                                          .categories[index]
                                                          .categoryId;
                                                    });
                                                    Navigator.of(context).pop();
                                                  },
                                                  child: Text(
                                                    dropdown
                                                        .categories[index].name,
                                                    style: GoogleFonts.cairo(
                                                        color: maincolor,
                                                        fontWeight:
                                                            FontWeight.w600,
                                                        fontSize: 15),
                                                  )),
                                              Divider(
                                                color: Colors.grey,
                                                height: 1,
                                                thickness: 1,
                                              )
                                            ],
                                          ),
                                        ),
                                      );
                                    },
                                  ),
                                ),
                              ),
                            );
                          
                          },
                          child: Text(
                            "اختر",
                            style: GoogleFonts.cairo(
                                color: accentcolor,
                                fontSize: 16,
                                fontWeight: FontWeight.bold),
                          ),
                        ),
                      ),
                    );
                  } else {
                    return Center(
                      child: CircularProgressIndicator(
                        strokeWidth: 12,
                        backgroundColor: maincolor,
                      ),
                    );
                  }
                }),

Lorsque je clique sur l'un des boutons de la boîte de dialogue d'alerte, il se ferme AlertDialog Preview

ce que je veux, c'est un moyen de l'ouvrir à nouveau sans fermer ou après la fermeture sans cliquer sur aucun bouton

TOUTE AIDE SERA APPRÉCIÉE

0
Abdelrahman M. Elmarakby 24 août 2020 à 15:29

2 réponses

Meilleure réponse
Navigator.of(context).pop();

Pour fermer la boîte de dialogue

0
ajs.sonawane 24 août 2020 à 12:49

Le showDialog est un futur, vous pouvez donc utiliser alors, catchError, onComplete. Utilisez then ou onComplete pour exécuter tout ce que vous voulez après la fermeture de la première boîte de dialogue.

showDialog(
    child: AlertDialog(...)
).then((){
   // Your code goes here
   // It will run after the dialog is closed
});

Un moyen simple d'exécuter la même boîte de dialogue consiste à créer une fonction pour l'ouvrir:

Future _showDialog(BuildContext buildContext){
  return showDialog(
    context: context,
    child: AlertDialog(...)
  )
}

Et que vous feriez quelque chose comme ça:

_showDialog(
    buildContext: context
).onComplete((){
   // Your code goes here
   // It will run after the dialog is closed
   _showDialog() //to Show again
});

Si vous rencontrez des problèmes à cause du contexte, utilisez un scaffoldKey et modifiez le contexte de la boîte de dialogue:

// Set it just at the top of your main widget
final _scaffoldKey = new GlobalKey<ScaffoldState>();

showDialog(
      context: _scaffoldKey.currentContext,
      ...)

// Set this parm on your scaffold
key: _scaffoldKey,
1
Rod 24 août 2020 à 13:21