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

Flutter中使用sembast如何查询匹配特定Map值的记录?

Flutter sembast 校验指定收藏记录是否存在的实现方法

sembast 查询返回的列表元素为 RecordSnapshot 类型,可通过其 value 属性获取存储的键值对数据,以下是两种实现方案:

方案1:基于现有 getFavorites() 返回结果校验

如果已经拿到了全量收藏列表,可以直接遍历列表匹配字段:

// 定义目标匹配条件
const targetRecord = {
  'name': 'Daredevil',
  'season': 1,
  'episode': 13
};

final favList = await getFavorites();
bool isRecordExists = false;

if (favList != null) {
  // 用any方法遍历,匹配到符合条件的记录就会返回true
  isRecordExists = favList.any((snapshot) {
    Map recordData = snapshot.value as Map;
    return recordData['name'] == targetRecord['name']
        && recordData['season'] == targetRecord['season']
        && recordData['episode'] == targetRecord['episode'];
  });
}

// 输出校验结果
print("目标记录是否存在:$isRecordExists");

方案2:直接通过sembast查询校验(推荐)

不需要加载全量收藏数据,直接在数据库层做过滤统计,数据量大时性能更优:

Future<bool> checkTargetRecordExists() async {
  // 构建匹配三个字段的查询条件
  final finder = Finder(
    filter: Filter.and([
      Filter.equals('name', 'Daredevil'),
      Filter.equals('season', 1),
      Filter.equals('episode', 13),
    ]),
  );
  // 仅统计匹配的记录条数,不需要返回具体数据
  int matchCount = await _favFolder.count(await _db, finder: finder);
  return matchCount > 0;
}

// 调用方法直接获取结果
bool exists = await checkTargetRecordExists();

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.05 10:39:04