v1
This commit is contained in:
62
lib/src/models/kanji_item.dart
Normal file
62
lib/src/models/kanji_item.dart
Normal file
@@ -0,0 +1,62 @@
|
||||
class KanjiItem {
|
||||
final int id;
|
||||
final String characters;
|
||||
final List<String> meanings;
|
||||
final List<String> onyomi;
|
||||
final List<String> kunyomi;
|
||||
|
||||
KanjiItem({
|
||||
required this.id,
|
||||
required this.characters,
|
||||
required this.meanings,
|
||||
required this.onyomi,
|
||||
required this.kunyomi,
|
||||
});
|
||||
|
||||
factory KanjiItem.fromSubject(Map<String, dynamic> subj) {
|
||||
final int id = subj['id'] as int;
|
||||
final data = subj['data'] as Map<String, dynamic>;
|
||||
final String characters = (data['characters'] ?? '') as String;
|
||||
final List<String> meanings = <String>[];
|
||||
final List<String> onyomi = <String>[];
|
||||
final List<String> kunyomi = <String>[];
|
||||
|
||||
if (data['meanings'] != null) {
|
||||
for (final m in data['meanings'] as List) {
|
||||
meanings.add((m['meaning'] as String).toLowerCase());
|
||||
}
|
||||
}
|
||||
|
||||
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: id,
|
||||
characters: characters,
|
||||
meanings: meanings,
|
||||
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();
|
||||
}
|
||||
Reference in New Issue
Block a user