【问题标题】:Hive Flutter, How to get values in reverse key orderHive Flutter,如何以反向键顺序获取值
【发布时间】:2020-12-11 12:57:27
【问题描述】:

我正在使用一个名为 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";
  }
}

图书馆链接: HiveHive Documentation

【问题讨论】:

    标签: flutter dart


    【解决方案1】:

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2022-01-06
      • 2020-07-20
      • 2021-10-13
      • 2017-06-25
      • 2012-11-29
      • 1970-01-01
      • 2013-12-08
      相关资源
      最近更新 更多