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
相关产品推荐
相关产品推荐

