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

w7t8yxp5  于 2023-03-13  发布在  Flutter
关注(0)|答案(3)|浏览(126)

我试图访问一个列表,但前提是它不为空。在收到一些奇怪的路径后,我发现List.isNotEmpty返回的长度为0,并且它不为空。当然,除非我认为“空”是错误的思维方式?
下面是我运行的测试,我创建了一个“空”列表,然后测试isNotEmpty,看看返回了什么。

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

//输出

Keywords is not empty..?
Keywords length = 0
// Error: Bad state: No element

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

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

输出:

myString is empty

查看文档,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

有人能给我解释一下吗?或者,也许这是一个错误?
Android Studio Dart软件开发工具包版本- 2.19.4(稳定)Flutter版本- 3.7.7(稳定)
谢谢大家!

gcuhipw9

gcuhipw91#

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

  • 确保在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");
}

下面的代码应该返回Keywords is empty
检查此DartPad链接。

6l7fqoea

6l7fqoea2#

我认为Flutter有一些问题,我在DartPad中测试了一下,效果很好。
Here是DartPad链接。
我建议您在Github上的the Flutter repository中打开一个问题。

7eumitmz

7eumitmz3#

尝试:

if (myKeywords.isNotEmpty == true) {}

相关问题