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

