Je suis nouveau dans Dart et j'ai un problème lors de la création de mon application Flutter.
J'ai une base de données Firestore en tant que backend et j'en récupère les données.
Quand je veux comparer une partie du données appelées status avec le texte 'CREATED', en utilisant == comparator, dart retournera false.
Quelqu'un peut-il expliquer pourquoi et comment le vérifier correctement?
rideObject est une carte
Update:
Voici la fonction qui contient la condition:
XXX
L'instruction d'impression retourne à la sortie:
I / flutter (15469): CRÉÉ
Ici vous pouvez voir la structure du rideObject
Curieusement, le statut de rideObject [" "] est le type de chaîne comme indiqué ici dans la console:
rideObject["status"] is String true "CREATED" is String true rideObject["status"] "CREATED" rideObject["status"] == "CREATED" false
3 Réponses :
Si les deux sont vraiment des chaînes, vous pouvez utiliser "compareTo".
str1.compareTo(str2)
Cela est expliqué ici: https://www.tutorialspoint.com/dart_programming/dart_programming_string_comparmeto_method.htm / p. >
N'a pas aidé, renvoie -1
Que se passe-t-il si vous enregistrez les deux chaînes dans deux variables chaîne avant de les comparer? String str1 = rideObject ["statut"]; String str2 = "CRÉÉ"; puis: str1.compareTo (str2);
@ celt-k-b encore une fois le même problème.
Je n'ai pas de solution particulière à ce problème, mais j'ai mis à jour la dernière version de Flutter qui est apparue aujourd'hui, déplacé la chaîne "CREATED" en constante et résolu un avertissement sans rapport pour une autre partie de l'application, et cela a soudainement démarré travailler.
La chaîne que vous avez obtenue de votre serveur est probablement codée et contient un caractère spécial que vous ne pouvez pas voir, essayez de comparer les valeurs hexadécimales des deux chaînes, puis remplacez tous les caractères spéciaux de la chaîne renvoyée par le serveur .
En utilisant ceci, vous pouvez voir la différence non visible réelle entre les deux chaînes:
var text1 = utf8.encode(hardcodedText).toString(); var text2 = utf8.encode(textFromServer).toString();
Pouvez-vous publier le code là où vous rencontrez le problème? J'ai testé un cas similaire et cela fonctionne très bien.
Êtes-vous sûr d'avoir reçu la chaîne "CREATED" du serveur? Pouvez-vous l'imprimer pour vérifier?
@MazinIbrahim J'ai ajouté l'exemple de code et quelques autres choses
Cela m'arrive aussi ... la comparaison de deux chaînes de valeurs exactes (1 du serveur) renvoie false ...