3

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

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

我正在尝试从此示例中实现 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();
}

4

2 回答 2

1

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

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

因此,Hive.box 和 HiveList 的类型不匹配。

于 2020-05-05T01:06:40.723 回答
0

设法通过 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;
  }
于 2020-02-04T21:58:15.190 回答