Hive Flutter,如何以相反的键顺序获取值



我使用的是一个名为Hive的库,它是一个非常快速的NoSQL数据库。我已经把所有的东西都设置好了,我正试图以相反的顺序获得值(后进先出(。

我有一个条目框,每个条目都有一个创建日期和一个条目文本。正如你在代码中看到的,每当创建一个条目时,它的日期都是"0";现在"。我想要从最近的条目(最新日期(开始获取条目列表。默认情况下,使用box.add()添加的第一个条目的关键字为0,后面的关键字为1,等等。在Hive的文档中,它说可以获取值;按照相反的词典顺序";但我没能搞清楚。

提前感谢!

import 'package:hive/hive.dart';
part '../type_adapters/entry.g.dart';
@HiveType(typeId: 0)
class Entry extends HiveObject {
@HiveField(0)
String _entryText;
@HiveField(1)
DateTime _creationDate;
Entry(this._entryText) {
_creationDate = DateTime.now();
}
String get entryText => _entryText;
DateTime get creationDate => _creationDate;
@override
String toString() {
return "$_entryText, $_creationDate, $key";
}
}

库链接:Hive Hive文档

所以我想明白了,当打开盒子时,必须传递自己的排序函数。Hive的默认方式是:

/// Efficient default implementation to compare keys
int defaultKeyComparator(dynamic k1, dynamic k2) {
if (k1 is int) {
if (k2 is int) {
if (k1 > k2) {
return 1;
} else if (k1 < k2) {
return -1;
} else {
return 0;
}
} else {
return -1;
}
} else if (k2 is String) {
return (k1 as String).compareTo(k2);
} else {
return 1;
}
}

它们的默认函数按字典顺序为您获取值为了逆转它,不得不通过我自己的";keyComparator";(这是用于对值进行排序的函数,它接收2个键并返回一个int(

所以当打开盒子时:

_entryBox = await Hive.openBox(ENTRY_BOX, keyComparator: _reverseOrder);

_reverseOrder功能:

int _reverseOrder(k1, k2) {
if (k1 is int) {
if (k2 is int) {
if (k1 > k2) {
return -1;
} else if (k1 < k2) {
return 1;
} else {
return 0;
}
} else {
return -1;
}
}
}

如果要使用开始键和结束键,而不是一次获取所有值(box.valuesBetween(startKey: , endKey:,(,则会变得有点复杂。

我知道现在为这个威胁添加答案已经很晚了。但如果其他人对此感到困惑,我会加上它。

配置单元不支持排序。因此,最简单的方法是在取出值后对列表进行排序。

entryList = entryBox.values;

现在对列表进行排序,然后将其显示在UI上。

entryList.sort((a, b) => -a._creationDate.compareTo(b._creationDate));

(-(号将列表从最近的时间戳反转为较旧的时间戳

最新更新