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

标签 flutter dart

我正在使用一个名为 Hive 的库,它是一个非常快的 NoSQL 数据库。我已设置好所有内容,并且正在尝试以相反的顺序获取值(后进先出)。

我有一个条目框,每个条目都有一个创建日期和一个条目文本。正如您在代码中看到的,每当创建条目时,它的日期就是“现在”。我想获取从最近条目(最新日期)开始的条目列表。默认情况下,使用 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 Documentation

最佳答案

所以我想通了,你必须在打开盒子时传递你自己的排序函数。 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:, ),事情会变得有点复杂。

关于flutter - Hive Flutter,如何以相反的键顺序获取值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/65251802/

相关文章:

dart - 点击 "under"SpriteWidget 层

node.js - NodeJs在Dart中请求回调

ios - 自定义 `UITextField` 子类没有出现在屏幕上

flutter - flutter 中动态创建的复选框不会更改单击时的状态

具有动态持续时间的 Flutter AnimationController - 错误 : Const variables must be initialized with a constant value

dart - 如何判断一个 Dart 列表是否为固定列表?

dart - 如何将POST header 中的数据检索到变量中?

flutter - RenderBox 没有布局(SingleChildScrollView with ListView.Builder)

dart - 如何使用Flutter实现这个有趣的List/Grid View 动画

android - 如何在 Flutter 中获取 GPS 时间?