web-dev-qa-db-fra.com

comment rafraîchir alertdialog en flutter

Actuellement, j'ouvre un AlertDialog avec un IconButton. l'utilisateur peut cliquer sur ce IconButton, j'ai deux couleurs pour chaque clic. Le problème est que je dois fermer le AlertDialog et rouvrir pour voir le changement d'état de l'icône de couleur. Je veux simplement ouvrir le clic AlertDialog sur IconButton et changer sa couleur.

Voici le code:

                         bool pressphone = false;
                            //....
                          new IconButton(
                            icon: new Icon(Icons.phone),
                            color: pressphone ? Colors.grey : Colors.green,
                            onPressed: () => setState(() => pressphone = !pressphone),
                          ),
10
Nitneuq

C'est parce que vous devez mettre votre AlertDialog dans son propre StatefulWidget et y déplacer toute la logique de manipulation d'état sur la couleur.

Mise à jour:

enter image description here

void main() => runApp(MaterialApp(home: Home()));

class Home extends StatelessWidget {
  @override
  Widget build(BuildContext context) {
    return Scaffold(
        body: Center(
            child: RaisedButton(
      child: Text('Open Dialog'),
      onPressed: () {
        showDialog(
            context: context,
            builder: (_) {
              return MyDialog();
            });
      },
    )));
  }
}

class MyDialog extends StatefulWidget {
  @override
  _MyDialogState createState() => new _MyDialogState();
}

class _MyDialogState extends State<MyDialog> {
  Color _c = Colors.redAccent;
  @override
  Widget build(BuildContext context) {
    return AlertDialog(
      content: Container(
        color: _c,
        height: 20.0,
        width: 20.0,
      ),
      actions: <Widget>[
        FlatButton(
            child: Text('Switch'),
            onPressed: () => setState(() {
                  _c == Colors.redAccent
                      ? _c = Colors.blueAccent
                      : _c = Colors.redAccent;
                }))
      ],
    );
  }
}
15
aziza
showDialog(
  context: context,
  builder: (context) {
    String contentText = "Content of Dialog";
    return StatefulBuilder(
      builder: (context, setState) {
        return AlertDialog(
          title: Text("Title of Dialog"),
          content: Text(contentText),
          actions: <Widget>[
            FlatButton(
              onPressed: () => Navigator.pop(context),
              child: Text("Cancel"),
            ),
            FlatButton(
              onPressed: () {
                setState(() {
                  contentText = "Changed Content of Dialog";
                });
              },
              child: Text("Change"),
            ),
          ],
        );
      },
    );
  },
);
10
malibayram91

Actuellement pour récupérer la valeur du dialogue que j'utilise

showDialog().then((val){
setState (() {}); 
print (val);
});

Exemple 1er écran

    onPressed: () { 
    showDialog(
       context: context,
       barrierDismissible: false,
       builder: (context) {
         return AddDespesa();
       }).then((val) {
         setState(() {});
         print(val);
        }
    );
   }

2ème écran

AlertDialog(
    title: Text("Sucesso!"),
    content: Text("Gasto resgristrado com sucesso"),
    actions: <Widget>[
    FlatButton(
      child: Text("OK"),
      onPressed: () {
         Navigator.pop(context, true);
      },
     ),
   ],
 );

Sera imprimé vrai,

0
user11771826