为什么我的列表相等检查在 Flutter 中看起来一样时不起作用?

Why is my list equal check not working when they look the same in Flutter?

提问人:kopemik685 提问时间:12/7/2022 更新时间:12/7/2022 访问量:75

问:

我的 Flutter 程序的一部分创建了一个列表,然后检查该列表是否等于另一个列表。但是,当我测试它时,它返回 false。我做了一系列打印语句来检查为什么它们不相等并且它们看起来相同,但它一直返回 false。

代码:

print("programList: " + programList.toString());
//print(programList.runtimeType);
var testResult = (programList == ["apple", "apple", "banana"]);
print("programList are correct: " + testResult.toString());
for(var i in programList){
  print(i + ": " + i.runtimeType);
}
if(programList == ["apple", "apple", "banana"]){
  print("in test loop");
  //do stuff
}

这是打印输出:

I/flutter ( 1429): programList: \[apple, apple, banana\]
I/flutter ( 1429): programList are correct: false

Exception caught by gesture
The following \_TypeError was thrown while handling a gesture:
type '\_Type' is not a subtype of type 'String' of 'other'

直到 runtimeType for 循环才开始出现错误,但在此之前,它没有打印“在测试循环中”。

我尝试添加所有这些打印语句以查看发生了什么。我尝试添加runtimeTypes以尝试了解它们是否提出了不同的类型,但这导致了它自己的错误。

颤振 相等

评论


答:

1赞 powerman23rus 12/7/2022 #1

因为 dart 的默认设置是按 .因此,对于具有相同值的 2 个数组,您有不同的引用。reference

要使它工作,您必须使用DeepCollectionEquality

import 'package:collection/collection.dart';

void main() {
  Function equality = const DeepCollectionEquality().equals;
  final programList = ["apple", "apple", "banana"];
  print(equality(programList, ["apple", "apple", "banana"]));
}

评论

0赞 kopemik685 12/7/2022
它在 DeepCollectionEquality().equals 上出现错误。它说它不是一个类。我需要某种进口声明吗?我似乎在 Flutter api 文档中找不到一个
0赞 powerman23rus 12/7/2022
添加 import: import 'package:collection/collection.dart';