You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Flutter中使用first获取列表记录遇Bad State错误,如何返回null?

解决Dart中列表查询无匹配数据时返回null的问题

你可以通过firstWhere方法并指定orElse回调来实现无匹配数据时返回null,替代原来容易抛出错误的写法:

final daySummeryModel = daySummeryList.firstWhere(
  (element) => element.dateTime.isSameDate(date),
  orElse: () => null,
);

原理说明

原来的where().toList().first写法,会在过滤后的列表为空时抛出Bad state: No element错误——因为first方法要求目标列表必须包含至少一个元素。而firstWhere方法专门提供了orElse参数,允许你定义当没有找到匹配元素时的返回逻辑,这里直接返回null就能满足后续空值判断的需求。

另一种可选写法

如果你更倾向于分步处理,也可以先过滤再判断列表是否为空:

final filteredSummaries = daySummeryList.where((element) => element.dateTime.isSameDate(date)).toList();
final daySummeryModel = filteredSummaries.isNotEmpty ? filteredSummaries.first : null;

这种写法逻辑更直观,但相比firstWhere会多一次列表转换的开销,数据量小时差异可以忽略。

后续空值判断示例

拿到可能为null的结果后,你可以这样做空值处理:

if (daySummeryModel != null) {
  // 展示对应日期的汇总信息
  print("当日收入:${daySummeryModel.incomeTotal}");
} else {
  // 处理无数据的情况,比如提示用户该日期无记录
  print("该日期没有汇总数据");
}

内容的提问来源于stack exchange,提问作者user22362195

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.16 02:56:07