我正在运行**list.firstWhere
**,有时会抛出异常:
Bad State: No element
When the exception was thrown, this was the stack:
#0 _ListBase&Object&ListMixin.firstWhere (dart:collection/list.dart:148:5)
我不明白这意味着什么,也不能通过查看来源来确定问题。
我的firstWhere
如下所示:
list.firstWhere((element) => a == b);
7条答案
按热度按时间jv2fixgn1#
当没有匹配元素时,即当
a == b
对于list
和中的任何元素都不为真时,将发生这种情况,未指定 * 可选参数orElse
*。您还可以指定
orElse
来处理这种情况:如果你想在没有匹配的情况下返回
null
,你也可以使用orElse
:package:collection
还包含一个用于null
情况的方便扩展方法(它在使用null safety时应该也能更好地工作):更多信息请看
firstWhereOrNull
,感谢@EdwinLiu指出。vktxenjb2#
现在可以导入
package:collection
并使用扩展方法firstWhereOrNullbcs8qyzn3#
firstWhere
返回根据条件生成的newList如果代码中未定义orElse,并且搜索到列表中不存在的错误项,则会显示BadStateException
qhhrdooz4#
firstWhere()
实现如下所示:如你所见,如果定义了
orElse
arg,那么方法将使用它,并且如果没有元素匹配条件,那么方法将不会抛出任何异常,所以使用下面的代码来处理这种错误情况:bqucvtff5#
在dart**
2.10
**上有一个新特性null-safety
,当你有一个对象列表,并且你想对一个特定对象的属性做一些事情时,这个特性可以为你带来魔力:v7pvogib6#
需要检查相关列表的itemCount参数,例如:itemCount:snapshot.data?.docs.length如果你的itemcount和上面一样,你必须先检查nullsafety,然后检查nullability。你的itemcount可能如下所示。itemCount:快照.数据?.文档.长度??0,
当然,在StreamBuilder中,您可以使用singleOrNull:snapshot.data!.docs.单一或空!['X'],
3j86kqsm7#
我在使用
.first
属性和空数组时遇到了这个问题。要修复此问题,只需在使用
.first
之前检查数组是否为空:示例: