add new vocabulary mode

This commit is contained in:
Rene Kievits
2025-10-28 03:42:16 +01:00
parent 61081ac8a4
commit 68f6fa12bb
7 changed files with 593 additions and 19 deletions

View File

@@ -79,3 +79,61 @@ String _katakanaToHiragana(String input) {
}
return buf.toString();
}
enum VocabQuizMode { vocabToEnglish, englishToVocab }
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 VocabularyItem {
final int id;
final String characters;
final List<String> meanings;
final List<String> readings;
final Map<String, VocabSrsItem> srsItems = {};
VocabularyItem({
required this.id,
required this.characters,
required this.meanings,
required this.readings,
});
factory VocabularyItem.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> readings = <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) {
readings.add(r['reading'] as String);
}
}
return VocabularyItem(
id: id,
characters: characters,
meanings: meanings,
readings: readings,
);
}
}