飞镖比较两个字符串返回假

时间:2019-05-19 10:47:38

标签: dart flutter

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

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

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

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

rideObject是一个地图

enter image description here

更新:

以下是其中具有条件的函数:

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的结构

enter image description here

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

rideObject["status"] is String
true
"CREATED" is String
true
rideObject["status"]
"CREATED"
rideObject["status"] == "CREATED"
false

5 个答案:

答案 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)