【问题标题】:Dart compare two strings return falseDart 比较两个字符串返回 false
【发布时间】:2019-10-06 00:03:30
【问题描述】:

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

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

当我想用 == 比较器比较部分称为状态的数据与文本“已创建”时,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);
      }
    }
  }

打印语句返回输出:

I/flutter (15469):已创建

这里可以看到rideObject的结构

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

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

【问题讨论】:

  • 你能把代码贴在你有问题的地方吗?我测试了一个类似的案例,它工作正常。
  • 您确定从服务器收到字符串“CREATED”吗?可以打印出来验证一下吗?
  • @MazinIbrahim 我已经添加了代码示例和其他一些东西
  • 也发生在我身上.. 比较两个确切的值字符串(来自服务器的 1 个)返回 false...

标签: dart flutter


【解决方案1】:

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

if(str1.compareTo(str2)==0){
}

这里解释: https://www.tutorialspoint.com/dart_programming/dart_programming_string_compareto_method.htm

【讨论】:

  • 没有帮助,返回 -1
  • 如果在比较之前将两个字符串保存在两个字符串变量中会怎样?字符串 str1 = RideObject["status"] ;字符串 str2 = "已创建";然后:str1.compareTo(str2);
  • @celt-k-b 再次出现同样的问题。
【解决方案2】:

我对此没有特别的解决方案,但我更新到了今天出现的最新 Flutter 版本,将“CREATED”字符串移动到常量,并解决了应用程序另一部分的不相关警告,然后它突然启动了上班。

【讨论】:

    【解决方案3】:

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

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

    var text1 = utf8.encode(hardcodedText).toString();
    var text2 = utf8.encode(textFromServer).toString();
    

    【讨论】:

      【解决方案4】:

      这个问题的答案在flutter的文档中: https://api.flutter.dev/flutter/dart-core/String/compareTo.html

      你可以这样做:

      (var.compareTo('WORD') == 0)
      

      等价

      .compareTo()
      

      如果排序在前面则返回负值,如果排序在后面则返回正值,如果是equivalent.thisother则返回零

      【讨论】:

      • 欢迎来到 Stack Overflow!请编辑您的答案,以便将代码格式化为代码。
      【解决方案5】:

      根据@yonez 的回答,字符串通过服务器后编码可能会有所不同。

      代替:String.fromCharCodes(data)

      尝试使用:utf8.decode(data)

      【讨论】:

        猜你喜欢
        • 2016-04-17
        • 2011-11-14
        • 2016-12-18
        • 1970-01-01
        • 1970-01-01
        • 2013-12-06
        • 1970-01-01
        • 2011-12-25
        相关资源
        最近更新 更多