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

