Affichage pop-up

Bonjour,

Voici mon souci, j’ai créé des conditions pour l’affichage de pop-up. Jusque-là tout fonctionne.
Maintenant, lorsque je soumets n entrées, j’ai n pop-up à fermer, autrement dit le nombre de pop-up s’incrémente par rapport au nombre d’entrées. Quelqu’un peut-il m’ouvrir les yeux, je ne trouve pas le problème ?
Merci d’avance, voici mon code :

onSubmit: () {

                  //var mes = _myController.text;

                  if (_myController.text.length != 4) {

                    _buildPopUp(

                        context, "your code must have exactly 4 digits !");

                    return;

                  } else {

                    if (currentAppState.getAppConnectionState ==

                        MQTTAppConnectionState.disconnected) {

                      _buildPopUp(context, "you must be connected !");

                      return;

                    } else {

                      print('yoooooooooooo');

                      manager.getClient().updates!.listen(

                          (List<MqttReceivedMessage<MqttMessage?>>? c) {

                        print('recu');

                        // ignore: avoid_as

                        final MqttPublishMessage recMess =

                            c![0].payload as MqttPublishMessage;

                        // final MqttPublishMessage recMess = c![0].payload;

                        final String pt =

                            MqttPublishPayload.bytesToStringAsString(

                                recMess.payload.message);

                        //print('=>');

                        if (c[0].topic != 'reception1') {

                          return;

                        }

                        print(pt);

                        if (pt == "Erreur, mauvais login") {

                          print('test111111');

                          _buildPopUp(context,

                              "Your code is invalid, please try again!");

                          return;

                        } else {

                          print((/*'nouvelle page'*/ pt));

                          _buildPopUpOklogin(context, pt);

                          return;

                          /*Navigator.push(

                            context,

                            MaterialPageRoute(

                                builder: (context) =>

                                    const MyConnectedPage(

                                     

                                    )),

                          );*/

                        }

                        debugPrint(('reach'));

                        print(recMess.payload.message);

                      });

                    }

                    _publishMessage(_myController.text);

                    return;

                  }

                }

Bonjour,

L’idée serait d’avoir une partie affichage des erreurs selon l’information entrante avec la fonction _buildPopUp et une partie logique comme une fonction _getErrorCode() pour uniformiser le format des erreurs.

Donc l’infos passerait en premier dans _getErrorCode() avec les If que vous avez mis en place et retournerait un code uniformiser comme « 4 » pour « your code must have exactly 4 digits ! ». Cela peut-être un chiffre ou une courte chaine de caractère.
Une fois le système en place vous pouvez envoyer votre code erreur dans _buildPopUP qui va associer le code à la phrase à afficher.
Dans ce cas _buildPopUp est appelé à la fin.

Bonjour,

Merci pour votre retour, entre-temps, j’ai pu résoudre le problème en déplaçant l’écoute dans la méthode _publishMessage et un Future.delayed à 400 millisecondes.
Mais je prends bonne note de votre réponse.
Ici, je bloque sur bouton de connexion que je voudrais supprimer et le maintien de l’écoute en mode veille (j’ai tenté la méthode autoreconnect mais ça crée des bug : message en boucle).
Je m’explique : lors du lancement de l’application, je voudrais que la connexion au broker se fasse automatiquement et reste active en mode veille du device.

Merci pour votre retour,

Laurent

Bonjour,

Pour la connexion directement au lancement, l’idéal est d’appeler la fonction avant même le runApp() ce qui est possible si c’est une fonction qui n’a pas besoin de widget.
Pour ce qui est de la partie mise en veille c’est plus compliqué car Android impose certaine restriction pour économiser la batterie.

Bonjour,

Merci pour votre réponse.
En fait, lors de l’ouverture de l’application je dois arriver sur une page de login avec l’état à connected (voir pièce jointe mais sans les boutons).
Pour ce qui est de la partie mise en veille comment voyez-vous la chose en sachant qu’une fois le log effectué, je dois rester en écoute constante pour recevoir des alertes ?
En vous remerciant pour votre retour.
Laurent