Bonjour j’ai un problème dans mon code sur Flutter,
il me donne 3 erreur ,la premier .validate() et la deuxième .save() et la troisième length .
Merci de votre aide.
3.40.0 ? C’est pas vraiment possible ^^ Pour connaitre la version de flutter tu ouvres ton terminal de commande et tu tape la commande flutter doctor
La version de flutter est écrit sur la première ligne.
Ah, ce ne sont pas des erreurs lors de l’exécution de ton code. Dans ce cas tu peux passer ta souris dessus et lire l’erreur. Si tu ne comprends pas très bien de quoi ça parle, traduit là. Si la traduction ne t’aide pas copie/colle ton erreur sur internet et regarde les solutions qui te sont proposées. Sinon n’hésite pas à revenir ici en nous disant l’erreur qui est afficher lorsque tu passes ta souris dessus.
Je pense que tu es avec l’option « null safety », ce qui est très bien. Mais du coup, tu doit check tes variables correctement.
Dans ton cas, tu doit faire quelque chose comme :
_confirmer() {
if (_formkey.currentState?.validate() == true) {
_formkey.currentState!.save();
}
}
Car la propriété currentState peut être null.
Donc :
currentState?.validate() == true car on veut entrer dans le if si currentState n’est pas null et que validate() retourne true, sinon si on à null ou false on s’arrête là.
currentState!.save() car si on est entré dans le if, forcément currentState n’est pas null, donc on peut faire le save() en spécifiant au compilateur que currentState n’est pas null (avec le !)
NB: currentState?.save() marcherai aussi, mais là on dit au compilateur de n’exécuter le save que si currentState n’est pas null. Donc il ajoutera un test (inutile) à ton code compilé (=> deviendra quelque chose comme if(_formkey.currentState != null) _formkey.currentState.save())
Le code de l’exemple compilé donnerai quelque chose comme :
Effectivement le test d’avant permet d’éviter le risque, mais si un jour quelqu’un modifie la condition du if sans voir le ! dessous, alors ça pourrait mal finir.
Une version possible sans ! :
_confirmer() {
final currentState = _formKey.currentState;
if (currentState != null && currentState.validate() == true) {
currentState.save();
}
}
J’ai essayé la solution de @mbritto juste au dessus.
Je suis avec la version de Flutter qui gère les null (pas moi hein ;-))
Ma fonction confirm :
Le message d’erreur :
The getter 'validate' isn't defined for the type 'State<StatefulWidget>'.
Try importing the library that defines 'validate', correcting the name to the name of an existing getter, or defining a getter or field named 'validate'.dartundefined_getter