Dart 比较两个字符串返回 false

Mic*_*káč 8 dart flutter

我是 dart 新手,在构建 Flutter 应用程序时遇到问题。

我有一个 firestore 数据库作为后端,我从那里获取数据。

当我想使用 == 比较器将名为 status 的部分数据与文本“CREATED”进行比较时,dart 将返回 false。

有人可以解释为什么以及如何正确检查它吗?

rideObject 是一个地图

在此输入图像描述

更新:

这是包含条件的函数:

Widget _getPage() {
 if (rideObject == null) {
      return OrderRidePage(
          address: address,
          ridesReference: reference,
          setRideReference: this._setRideReference);
    } else {
      print(rideObject['status']);
      if (rideObject['status'] == "CREATED") {
        return LoadingPage(
            removeRideReference: this._removeRideReference,
            rideReference: rideReference);
      } else {
        return RidePage(
            address: address,
            ridesReference: reference,
            setRideReference: _setRideReference);
      }
    }
  }
Run Code Online (Sandbox Code Playgroud)

print语句返回输出:

我/颤振(15469):已创建

这里可以看到rideObject的结构

在此输入图像描述

有趣的是,rideObject["status"] 是 String 类型,如控制台中所示:

rideObject["status"] is String
true
"CREATED" is String
true
rideObject["status"]
"CREATED"
rideObject["status"] == "CREATED"
false
Run Code Online (Sandbox Code Playgroud)

小智 5

如果两者都是字符串,则可以使用“compareTo”,如果两者相等则返回 0。

if(str1.compareTo(str2)==0){
}
Run Code Online (Sandbox Code Playgroud)

此处解释: https: //www.tutorialspoint.com/dart_programming/dart_programming_string_compareto_method.htm


yon*_*nez 5

您从服务器获取的字符串可能已编码并且包含您看不到的特殊字符,请尝试比较两个字符串的十六进制值,然后替换服务器返回的字符串中的所有特殊字符。

使用它,您可以看到两个字符串之间实际不可见的差异:

var text1 = utf8.encode(hardcodedText).toString();
var text2 = utf8.encode(textFromServer).toString();
Run Code Online (Sandbox Code Playgroud)


Mic*_*káč 3

我对此没有特定的解决方案,但我更新到了今天发布的最新 Flutter 版本,将“CREATED”字符串移至常量,并解决了应用程序另一部分的不相关警告,然后它突然开始工作。