Dart/Flutter List.isNotEmpty() 不正确?

Fox*_*nut 0 dart flutter

我正在尝试访问一个列表,但前提是它不为空。在收到一些奇怪的路径后,我发现 List.isNotEmpty 返回的长度为 0,并且它不为空。当然,除非我所认为的“空”是错误的心态?

这是我运行的测试,我在其中创建了一个“空”列表。然后,我测试了一下,看看测试 isNotEmpty 时返回了什么。

List<String> myKeywords = [];
if(myKeywords.isNotEmpty){
  print("Keywords is not empty..?");
  print("Keywords length = ${myKeywords.length}");
  print("Keyword: \"${myKeywords.first}\"");
}
Run Code Online (Sandbox Code Playgroud)

// 输出

Keywords is not empty..?
Keywords length = 0
// Error: Bad state: No element
Run Code Online (Sandbox Code Playgroud)

这与字符串的工作方式不同:

String myString = "";
if(myString.isNotEmpty){
  print("myString is not empty..?");
  print("myString length = ${myString.length}");
}
else{
  print("myString is empty");
}
Run Code Online (Sandbox Code Playgroud)

输出:

myString is empty
Run Code Online (Sandbox Code Playgroud)

查看文档,List.isNotEmpty 声明如下:

Whether this collection has at least one element.
May be computed by checking if iterator.moveNext() returns true.
Example:
final numbers =  {1, 2, 3};
print(numbers.isNotEmpty); // true;
print(numbers.iterator.moveNext()); // true
Run Code Online (Sandbox Code Playgroud)

谁可以给我解释一下这个?或者,也许这是一个错误?

Android Studio Dart SDK 版本 - 2.19.4(稳定) Flutter 版本 - 3.7.7(稳定)

谢谢你!

kri*_*yaa 5

它实际上正在按预期工作。尝试调试你的程序,因为上面的输出不正确

确保您没有在isNotEmpty初始化之间添加任何元素。

以下代码的输出将是:

List<String> myKeywords = [];
if (myKeywords.isNotEmpty){
  print("Keywords is not empty..?");
  print("Keywords length = ${myKeywords.length}");
  print("Keyword: \"${myKeywords.first}\"");
} else {
  print("Keywords is empty");
}
Run Code Online (Sandbox Code Playgroud)

以下代码应返回Keywords is empty.

检查此DartPad链接。

  • 此链接解释了如何共享您的 Dart Pad:https://github.com/dart-lang/dart-pad/wiki/Sharing-Guide (3认同)