themes and some refractoring
This commit is contained in:
@@ -1,54 +1,24 @@
|
||||
enum QuizMode { kanjiToEnglish, englishToKanji, reading }
|
||||
import 'subject.dart';
|
||||
|
||||
class SrsItem {
|
||||
final int kanjiId;
|
||||
final QuizMode quizMode;
|
||||
final String? readingType;
|
||||
int srsStage;
|
||||
DateTime lastAsked;
|
||||
|
||||
SrsItem({
|
||||
required this.kanjiId,
|
||||
required this.quizMode,
|
||||
this.readingType,
|
||||
this.srsStage = 0,
|
||||
DateTime? lastAsked,
|
||||
}) : lastAsked = lastAsked ?? DateTime.now();
|
||||
}
|
||||
|
||||
class KanjiItem {
|
||||
final int id;
|
||||
final int level;
|
||||
final String characters;
|
||||
final List<String> meanings;
|
||||
class KanjiItem extends Subject {
|
||||
final List<String> onyomi;
|
||||
final List<String> kunyomi;
|
||||
final Map<String, SrsItem> srsItems = {};
|
||||
|
||||
KanjiItem({
|
||||
required this.id,
|
||||
required this.level,
|
||||
required this.characters,
|
||||
required this.meanings,
|
||||
required super.id,
|
||||
required super.level,
|
||||
required super.characters,
|
||||
required super.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 int level = data['level'] as int;
|
||||
final String characters = (data['characters'] ?? '') as String;
|
||||
final List<String> meanings = <String>[];
|
||||
final commonFields = Subject.parseCommonFields(subj);
|
||||
final data = commonFields['data'] as Map<String, dynamic>;
|
||||
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? ?? '';
|
||||
@@ -62,10 +32,10 @@ class KanjiItem {
|
||||
}
|
||||
|
||||
return KanjiItem(
|
||||
id: id,
|
||||
level: level,
|
||||
characters: characters,
|
||||
meanings: meanings,
|
||||
id: commonFields['id'] as int,
|
||||
level: commonFields['level'] as int,
|
||||
characters: commonFields['characters'] as String,
|
||||
meanings: commonFields['meanings'] as List<String>,
|
||||
onyomi: onyomi,
|
||||
kunyomi: kunyomi,
|
||||
);
|
||||
@@ -83,88 +53,3 @@ String _katakanaToHiragana(String input) {
|
||||
}
|
||||
return buf.toString();
|
||||
}
|
||||
|
||||
enum VocabQuizMode { vocabToEnglish, englishToVocab, audioToEnglish }
|
||||
|
||||
class VocabSrsItem {
|
||||
final int vocabId;
|
||||
final VocabQuizMode quizMode;
|
||||
int srsStage;
|
||||
DateTime lastAsked;
|
||||
|
||||
VocabSrsItem({
|
||||
required this.vocabId,
|
||||
required this.quizMode,
|
||||
this.srsStage = 0,
|
||||
DateTime? lastAsked,
|
||||
}) : lastAsked = lastAsked ?? DateTime.now();
|
||||
}
|
||||
|
||||
class PronunciationAudio {
|
||||
final String url;
|
||||
final String gender;
|
||||
|
||||
PronunciationAudio({required this.url, required this.gender});
|
||||
}
|
||||
|
||||
class VocabularyItem {
|
||||
final int id;
|
||||
final int level;
|
||||
final String characters;
|
||||
final List<String> meanings;
|
||||
final List<String> readings;
|
||||
final List<PronunciationAudio> pronunciationAudios;
|
||||
final Map<String, VocabSrsItem> srsItems = {};
|
||||
|
||||
VocabularyItem({
|
||||
required this.id,
|
||||
required this.level,
|
||||
required this.characters,
|
||||
required this.meanings,
|
||||
required this.readings,
|
||||
required this.pronunciationAudios,
|
||||
});
|
||||
|
||||
factory VocabularyItem.fromSubject(Map<String, dynamic> subj) {
|
||||
final int id = subj['id'] as int;
|
||||
final data = subj['data'] as Map<String, dynamic>;
|
||||
final int level = data['level'] as int;
|
||||
final String characters = (data['characters'] ?? '') as String;
|
||||
final List<String> meanings = <String>[];
|
||||
final List<String> readings = <String>[];
|
||||
final List<PronunciationAudio> pronunciationAudios = <PronunciationAudio>[];
|
||||
|
||||
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) {
|
||||
readings.add(r['reading'] as String);
|
||||
}
|
||||
}
|
||||
|
||||
if (data['pronunciation_audios'] != null) {
|
||||
for (final audio in data['pronunciation_audios'] as List) {
|
||||
final url = audio['url'] as String?;
|
||||
final metadata = audio['metadata'] as Map<String, dynamic>?;
|
||||
final gender = metadata?['gender'] as String?;
|
||||
|
||||
if (url != null && gender != null) {
|
||||
pronunciationAudios.add(PronunciationAudio(url: url, gender: gender));
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
return VocabularyItem(
|
||||
id: id,
|
||||
level: level,
|
||||
characters: characters,
|
||||
meanings: meanings,
|
||||
readings: readings,
|
||||
pronunciationAudios: pronunciationAudios,
|
||||
);
|
||||
}
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user