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

使用Drift数据库getSingle()未匹配行抛出StateError是否为预期行为?

Drift数据库getSingle()无匹配时抛StateError是否为预期行为?

这完全是预期行为。

Drift中getSingle()方法的设计定位就是:用于你明确知道查询结果一定存在且仅有一条的场景。当查询返回空(无匹配行)或者返回多条匹配结果时,它都会抛出对应的错误:

  • 无匹配数据时,抛出StateError (Bad state: No element)
  • 结果多于一条时,会抛出另一个StateError提示结果不唯一

如果你的业务场景允许查询结果为空,可以改用getSingleOrNull()方法,它会在无匹配时返回null,无需手动捕获异常:

Future<MyData?> singleMyData(String id) {
  return (select(myDatas)..where((t) => t.id.equals(id)))
      .getSingleOrNull();
}

要是你想保留getSingle()的同时处理空结果场景,也可以手动捕获异常:

Future<MyData?> singleMyData(String id) async {
  try {
    return await (select(myDatas)..where((t) => t.id.equals(id))).getSingle();
  } on StateError {
    return null;
  }
}

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.21 10:24:08