我是飞镖新手,在构建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);
}
}
}
print语句返回到输出:
I / flutter(15469):创建
在这里您可以看到rideObject的结构
有趣的是,rideObject [“ status”]是String类型,如控制台中所示:
rideObject["status"] is String
true
"CREATED" is String
true
rideObject["status"]
"CREATED"
rideObject["status"] == "CREATED"
false
答案 0 :(得分:0)
如果两个都是真正的字符串,则可以使用“ compareTo”。
str1.compareTo(str2)
在这里解释: https://www.tutorialspoint.com/dart_programming/dart_programming_string_compareto_method.htm
答案 1 :(得分:0)
我对此没有特殊的解决方案,但是我更新到了今天出现的最新Flutter版本,将“ CREATED”字符串移动为常量并解决了与应用程序其他部分无关的警告,然后突然启动工作。
答案 2 :(得分:0)
从服务器获取的字符串可能已编码,并且包含看不到的特殊字符,请尝试比较两个字符串的十六进制值,然后替换服务器返回的字符串中的所有特殊字符
使用它,您可以看到两个字符串之间的实际不可见差异:
var text1 = utf8.encode(hardcodedText).toString();
var text2 = utf8.encode(textFromServer).toString();
答案 3 :(得分:0)
这个问题的答案在flutter的文档中: https://api.flutter.dev/flutter/dart-core/String/compareTo.html
你可以这样做:
(var.compareTo('WORD') == 0)
是等价的
.compareTo()
如果在前排序则返回负值,如果在后排序则返回正值,如果和是 equivalent.thisother
则返回零
答案 4 :(得分:0)
根据@yonez 的回答,在字符串通过服务器后,编码可能会有所不同。
代替:String.fromCharCodes(data)
尝试使用:utf8.decode(data)