2
votes

Dart compare deux chaînes retournent false

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

 entrez la description de l'image ici

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

entrez la description de l'image ici

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


4 commentaires

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 ...


3 Réponses :


1
votes

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. >


3 commentaires

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.



1
votes

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.


0 commentaires

0
votes

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();


0 commentaires