状況
ローカルストレージライブラリ hive にJSON形式でデータを保存した場合、Dartの型としては Map<String, dynamic>になるが、これをHiveから読み出し→fromJsonでデコードしようとしたところ表題のエラーが発生していた。
もしかしたらFirebaseのsnapshotを受け取る場面でも同様のエラーに遭遇するかも知れない。
final box = await Hive.openBox('hoge');
// 同じ形式のJSONデータが複数件保存されている前提
// この時点でjsonListはList<Map<dynamic>>
final jsonList = box.values.toList();
// 取得した情報でMapを構築し、そこからHogeオブジェクトを生成しList化
return jsonList
.map((e) => Hoge.fromJson(e))
.toList();
対処
Listに格納された要素をmapメソッドで処理するコードだが、HogeオブジェクトをfromJsonメソッドで作ろうとしたが、Map<dynamic, dynamic> から Map<String, dynamic> に暗黙的に変換できないぞ、ということらしい。
うまくキャストしてやれば良いのだが、書き方としてはこうなる。
Map<String, dynamic>.from(e)
参考