3
votes

Problème avec la fonction d'appel à l'aide de onPressed dans Flutter

J'essaye d'appeler une fonction sur un onPressed dans Flutter.

J'ai essayé

                      secondary: const IconButton(
                        icon: Icon(Icons.domain),
                        onPressed: (){
                          _showDialog();
                        },
                      ),

and

  void _showDialog() {
    showDialog(
      context: context,
      builder: (BuildContext context) {
        return AlertDialog(
          title: Text("Title"),
          content: Text("Body"),
          actions: <Widget>[
            FlatButton(
              child: Text("Close"),
              onPressed: () {
                Navigator.of(context).pop();
              },
            ),
          ],
        );
      },
    );
  }

et

onPressed: () => _showDialog,


1 commentaires

une bonne et claire question


4 Réponses :


5
votes

Vous devriez essayer comme suit:

      secondary: IconButton(
                    icon: Icon(Icons.domain),
                    onPressed: (){
                      _showDialog();
                    },
                  ),

ou

onPressed: () => _showDialog(),

ou

onPressed: _showDialog,

UPDATE

Solution simple: supprimez le mot clé const

onPressed: (){ 
   _showDialog();
},


6 commentaires

Je reçois toujours l'erreur "Valeur constante non valide"


pourriez-vous ajouter le journal des erreurs? ajoutez également le code lorsque vous appelez


Désolé mon code ne fonctionne pas donc il n'y a pas de journal des erreurs. _showDialog est souligné en rouge et lorsque la souris est placée dessus, l'erreur est indiquée comme "Valeur constante non valide". J'ai mis à jour ma question avec le code.


Merci. J'ai mis à jour ma question avec la capture d'écran.


Même problème ici, une solution?


C'est parce que sur votre arbre supérieur, il y a quelque part un autre "const" (ou même plus d'un). Tracez tout jusqu'à la racine et supprimez tous les mots-clés "const" que vous trouvez.



-2
votes

Supprimez le mot clé const

Votre code

   secondary: IconButton(
                icon: Icon(Icons.domain),
                onPressed: (){
                  _showDialog();
                },
              ),

Mis à jour

   secondary: const IconButton(
                icon: Icon(Icons.domain),
                onPressed: (){
                  _showDialog();
                },
              ),


2 commentaires

la réponse est telle qu'elle était à mon avis et il est possible d'avoir les mêmes réponses. mais est-ce mal de faire cela?


oui, à l'avenir, les gens viendraient pour trouver une solution à leurs problèmes et il leur serait plus difficile de lire toutes les réponses. si votre solution était déjà mentionnée, vous pourriez simplement la voter.



-2
votes

Pour certains scénarios, vous pouvez déclarer une fonction de niveau supérieur ou statique:

  secondary: const IconButton(
                icon: Icon(Icons.domain),
                onPressed: myHandler,
              ),

...

  static void myHandler() {
    _showDialog();
  }

Uniquement dans ce cas ( top-level ou static) myHandler peut être traité comme une constante et passé au constructeur de constantes.


0 commentaires

-1
votes

Vous devez vérifier et supprimer le contanier (widget) const comme ceci

(X)

child: TextFormField(
                decoration:InputDecoration(
                 ...
              )

(O)

child: TextFormField(
                decoration: **const** InputDecoration(
                  prefixIcon: Icon(Icons.person),
                  suffixIcon: IconButton(
                      icon: Icon(Icons.remove_red_eye),
                      onPressed: showPassword,
                  ),
                  labelText: "Name *",
                  hintText: "Your Github account username",
                ),
              )


0 commentaires