Reputation: 134
I need help with retrieving data from Flutter Hive using HiveList; I get the error below:
HiveError: To use this list, you have to open the box " " first. E/flutter ( 3001): #0 HiveListImpl.box"
I am trying to implement Hive relation from this sample and no sample for retrieve data yet.
edited the code to open Box for Header and Details. still no chance to load data.
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();
}
Upvotes: 3
Views: 10065
Reputation: 424
It's a confusing error message, but it should be because you have to specify the generic type in the HiveList, just like you did when you opened.
_saleTicketHeader.saleTickets = HiveList<SaleTicket>(_saleTicketBox);
So, Hive.box and HiveList have the types dismatched.
Upvotes: 1
Reputation: 134
Managed to make it work by loop through the HiveList Key. Not sure it is best way ?
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;
}
Upvotes: 0