Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

how to solve dynamic list type casting error in Hive?

sorry I am new in using Flutter and using Hive local storage.

I am using

  hive: ^2.0.4
  hive_flutter: ^1.0.0

I open the box in main function like this

Future<void> main() async {

  await Hive.initFlutter();
  await Hive.openBox<List<Event>>("events");

}

after getting the data from the server, I save all the events to hive by using code like this

final eventsBox = Hive.box<List<Event>>("events");
final List<Event> eventsFromServer = await getEventsFromServer();
eventsBox.put("recommended_events", eventsFromServer);

but I have error when trying to read the data from the box, I read it like this

final eventsBox = Hive.box<List<Event>>("events");

// error in this one line below
final eventsFromHive = eventsBox.get("recommended_events", defaultValue: []) ?? []; 

type 'List < dynamic > ' is not a subtype of type 'List< Event >?' in type cast

how to solve this type casting error?

from the documentation in here it is said

Lists returned by get() are always of type List (Maps of type Map<dynamic, dynamic>). Use list.cast() to cast them to a specific type.

I don't know if it is the solution of my problem or not, but I don't know how to implement that in my code.

I tried it like this, but I still have the same error

final eventsFromHive = eventsBox.get("recommended_events")!.cast<Event>();

or maybe the way I write the syntax to save and read the list are totally wrong? please help :)

like image 454
Agung Laksana Avatar asked Sep 19 '25 12:09

Agung Laksana


1 Answers

I can finally solve it by using it like this. in main function

Future<void> main() async {

  await Hive.initFlutter();
  await Hive.openBox("events");

}

when saving data list

final eventsBox = Hive.box("events");
eventsBox.put("recommended_events", eventsFromServer);

and read it like this

final eventsBox = Hive.box("events");
final eventsFromHive = eventsBox.get("recommended_events")?.cast<Event>() ?? [];
like image 100
Agung Laksana Avatar answered Sep 21 '25 02:09

Agung Laksana