Dart比较两个字符串返回false
我是dart新手,在构建颤振应用程序时遇到了一个问题 我有一个firestore数据库作为后端,我从那里获取数据 当我想使用==比较器将名为status的部分数据与文本“CREATED”进行比较时,dart将返回false 有人能解释一下为什么以及如何正确地检查它吗 rideObject是一个地图 更新: 以下是包含条件的函数:Dart比较两个字符串返回false,dart,flutter,Dart,Flutter,我是dart新手,在构建颤振应用程序时遇到了一个问题 我有一个firestore数据库作为后端,我从那里获取数据 当我想使用==比较器将名为status的部分数据与文本“CREATED”进行比较时,dart将返回false 有人能解释一下为什么以及如何正确地检查它吗 rideObject是一个地图 更新: 以下是包含条件的函数: Widget _getPage() { if (rideObject == null) { return OrderRidePage(
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);
}
}
}
print语句返回到输出:
I/颤振(15469):已创建
在这里可以看到rideObject的结构
有趣的是,rideObject[“status”]是字符串类型,如控制台中的此处所示:
rideObject["status"] is String
true
"CREATED" is String
true
rideObject["status"]
"CREATED"
rideObject["status"] == "CREATED"
false
如果两者都是字符串,则可以使用“compareTo”,如果两者相等,它将返回0
if(str1.compareTo(str2)==0){
}
这里解释如下:
对此我没有特别的解决方案,但我更新到了今天出现的最新颤振版本,将“创建的”字符串改为常量,并解决了应用程序另一部分的不相关警告,然后它突然开始工作。您从服务器获得的字符串可能已编码,并且包含您看不到的特殊字符,请尝试比较两个字符串的十六进制值,然后替换服务器返回的字符串中的所有特殊字符 使用此选项,您可以看到两个字符串之间的实际不可见差异:
var text1 = utf8.encode(hardcodedText).toString();
var text2 = utf8.encode(textFromServer).toString();
该问题的答案在颤振文件中: 你可以做:
(var.compareTo('WORD') == 0)
相当于
.compareTo()
如果在前面排序,则返回负值;如果在后面排序,则返回正值;如果与
相等,则返回零。此另一个您可以将代码发布到出现问题的位置吗?我测试了一个类似的案例,它工作正常。您确定从服务器收到了字符串“CREATED”吗?你能打印出来验证吗?@MazinIbrahim我已经添加了代码示例,其他事情也很少发生在我身上。。比较两个精确值字符串(来自服务器的1)返回false…没有帮助,返回-1如果在比较之前将两个字符串保存在两个字符串变量中会发生什么情况?字符串str1=rideObject[“status”];字符串str2=“已创建”;然后是:str1.compareTo(str2)@celt-k-b同样的问题再次出现。欢迎来到Stack Overflow!请编辑您的答案,以便将代码格式化为代码。