import 'subject.dart'; class KanjiItem extends Subject { final List onyomi; final List kunyomi; KanjiItem({ required super.id, required super.level, required super.characters, required super.meanings, required this.onyomi, required this.kunyomi, }); factory KanjiItem.fromSubject(Map subj) { final commonFields = Subject.parseCommonFields(subj); final data = commonFields['data'] as Map; final List onyomi = []; final List kunyomi = []; if (data['readings'] != null) { for (final r in data['readings'] as List) { final typ = r['type'] as String? ?? ''; final reading = r['reading'] as String? ?? ''; if (typ == 'onyomi') { onyomi.add(_katakanaToHiragana(reading)); } else if (typ == 'kunyomi') { kunyomi.add(reading); } } } return KanjiItem( id: commonFields['id'] as int, level: commonFields['level'] as int, characters: commonFields['characters'] as String, meanings: commonFields['meanings'] as List, onyomi: onyomi, kunyomi: kunyomi, ); } } String _katakanaToHiragana(String input) { final buf = StringBuffer(); for (final r in input.runes) { if (r >= 0x30A1 && r <= 0x30FA) { buf.writeCharCode(r - 0x60); } else { buf.writeCharCode(r); } } return buf.toString(); }