Flutter 中 Hive 框中的记录过滤和排序
Posted
技术标签:
【中文标题】Flutter 中 Hive 框中的记录过滤和排序【英文标题】:Filter and sort records from Hive box in Flutter 【发布时间】:2021-05-24 00:58:18 【问题描述】:我使用 Hive 和 Flutter 将联系人存储为字母数字字符串,每个联系人数据都是一个带有时间戳的地图
方框行 =
Key. => Value
'abc123' => 'name': 'JK', 'country':'GB', 'timestamp': '568',
'etergb' => 'name': 'FS', 'country':'DE', 'timestamp': '425'
'546hfg' => 'name': 'TD', 'country':'GB', 'timestamp': '687'
现在可以使用 where country=GB 条件过滤这些并按 map.item.timestamp ASC/DESC 对行进行排序
【问题讨论】:
所以该值为List<Map<String,Map<String,String>>>
?或者顶层只是带有 abc123 之类的键的 Map。你想重新排序什么......地图没有排序。 :)
Hive 尚不支持原生排序和过滤。如果你想这样做,你必须自己在代码中手动完成。
【参考方案1】:
过滤器
final hiveBox = Hive.box<Dynamic>('<BOX_NAME>');
List values = hiveBox.values.toList();
filtered = box.values
.where((object) => object['country'] == 'GB')
.toList();
排序
filtered.sort((a, b) => a['timestamp'].compareTo(b['timestamp']));
【讨论】:
【参考方案2】:对于过滤,可以使用 For 循环或 Map。
您可以执行排序。下面是一个例子。
var items = box.values.toList();
items.sort((a, b) => a.name.compareTo(b.name));
@HiveType(typeId: 0)
class CategoryModel extends HiveObject
@HiveField(0)
String id;
@HiveField(1)
String name;
//...
CategoryModel(this.id, this.name);
【讨论】:
以上是关于Flutter 中 Hive 框中的记录过滤和排序的主要内容,如果未能解决你的问题,请参考以下文章
Flutter + Hive 检查 Future Builder 的框中是不是存在值
Flutter & Hive - 如何在 Hive 中保存重新排序的列表