【问题标题】:How to retrieve HiveList from Flutter Hive如何从 Flutter Hive 中检索 HiveList
【发布时间】:2020-05-19 16:18:48
【问题描述】:

我在使用 HiveList 从 Flutter Hive 检索数据方面需要帮助;我收到以下错误:

HiveError:要使用此列表,您必须先打开“”框。 E/flutter (3001): #0 HiveListImpl.box"

我正在尝试从this sample 实现 Hive 关系,但还没有用于检索数据的示例。

编辑代码以打开标题和详细信息框。仍然没有机会加载数据。

static Future<List<SaleTicket>> getAllSaleTickets() async {

  final _saleTicketBox = await Hive.box<SaleTicket>(_hive.SALE_TICKET_BOX);
  final _saleTicketHeaderBox = await Hive.box<SaleTicketHeader>(_hive.SALE_TICKET_COL_BOX);

  final _saleTicketHeader = (_saleTicketBox.isEmpty || _saleTicketBox.values.isEmpty)
    ? SaleTicketHeader()
    : _saleTicketHeaderBox.values.firstWhere((t) => t.id=1);

    _saleTicketHeader.saleTickets = HiveList(_saleTicketBox); // open ticket box
    return _saleTicketHeader.saleTickets.toList();
}

【问题讨论】:

  • 正如错误中所说,您需要打开盒子。你可能错过了。你能分享一些代码吗?
  • 用一些代码更新我的问题,但仍然没有任何线索 :) 无论如何,这个 Hive 关系功能仍处于实验阶段。

标签: flutter flutter-hive


【解决方案1】:

这是一个令人困惑的错误消息,但应该是因为您必须在 HiveList 中指定泛型类型,就像您在打开时所做的那样。

_saleTicketHeader.saleTickets = HiveList<SaleTicket>(_saleTicketBox);

所以,Hive.box 和 HiveList 的类型不匹配。

【讨论】:

    【解决方案2】:

    设法通过 HiveList 键循环使其工作。不确定这是最好的方法吗?

    static Future<List<SaleTicket>> getAllSaleTickets() async {
    final _saleTicketBox = await Hive.box<SaleTicket>('sale_ticket_box');
    final _saleTicketHeaderBox = await Hive.box<SaleTicketHeader>('sale_ticket_header_box');
    
    final _saleTicketHeader = (_saleTicketHeaderBox.isEmpty || _saleTicketHeaderBox.values.isEmpty) ? SaleTicketHeader() : _saleTicketHeaderBox.values.firstWhere((t) => t.id = 1);
    var saleTicketList = <SaleTicket>[];
    _saleTicketHeader.saleTickets.**keys.forEach**((key) {
      saleTicketList.add(_saleTicketBox.get(key));
    });
    
      }
    
      class SaleTicket extends HiveObject{
      @HiveField(0)
      String TicketName;
      ...
      }
    
      class SaleTicketHeader extends HiveObject{
      @HiveField(0)
      String TicketHeaderName;
      ...
      @HiveField(1)
      HiveList<SaleTicket> saleTickets;
      }
    

    【讨论】:

      猜你喜欢
      • 2021-11-13
      • 1970-01-01
      • 2020-07-20
      • 1970-01-01
      • 1970-01-01
      • 2021-08-28
      • 2019-11-14
      • 2019-01-26
      • 2022-01-13
      相关资源
      最近更新 更多