add a shit ton of feature for the custom srs
This commit is contained in:
@@ -15,6 +15,8 @@ class _CustomSrsScreenState extends State<CustomSrsScreen> with SingleTickerProv
|
||||
late TabController _tabController;
|
||||
final _deckRepository = CustomDeckRepository();
|
||||
List<CustomKanjiItem> _deck = [];
|
||||
List<CustomKanjiItem> _reviewDeck = [];
|
||||
bool _useKanji = false;
|
||||
final _quizScreenKeys = [
|
||||
GlobalKey<CustomQuizScreenState>(),
|
||||
GlobalKey<CustomQuizScreenState>(),
|
||||
@@ -30,6 +32,7 @@ class _CustomSrsScreenState extends State<CustomSrsScreen> with SingleTickerProv
|
||||
final key = _quizScreenKeys[_tabController.index];
|
||||
key.currentState?.playAudio();
|
||||
}
|
||||
setState(() {});
|
||||
});
|
||||
_loadDeck();
|
||||
}
|
||||
@@ -42,16 +45,52 @@ class _CustomSrsScreenState extends State<CustomSrsScreen> with SingleTickerProv
|
||||
|
||||
Future<void> _loadDeck() async {
|
||||
final deck = await _deckRepository.getCustomDeck();
|
||||
final now = DateTime.now();
|
||||
final reviewDeck = deck.where((item) {
|
||||
if (!item.useInterval) {
|
||||
return true;
|
||||
}
|
||||
return item.nextReview == null || item.nextReview!.isBefore(now);
|
||||
}).toList();
|
||||
|
||||
setState(() {
|
||||
_deck = deck;
|
||||
_reviewDeck = reviewDeck;
|
||||
});
|
||||
}
|
||||
|
||||
Future<void> _updateCard(CustomKanjiItem item) async {
|
||||
final index = _deck.indexWhere((element) => element.characters == item.characters);
|
||||
if (index != -1) {
|
||||
setState(() {
|
||||
_deck[index] = item;
|
||||
_reviewDeck.removeWhere((element) => element.characters == item.characters);
|
||||
});
|
||||
await _deckRepository.saveDeck(_deck);
|
||||
}
|
||||
}
|
||||
|
||||
@override
|
||||
Widget build(BuildContext context) {
|
||||
return Scaffold(
|
||||
appBar: AppBar(
|
||||
title: const Text('Custom SRS'),
|
||||
actions: [
|
||||
if (_tabController.index != 2)
|
||||
Row(
|
||||
children: [
|
||||
const Text('Kanji'),
|
||||
Switch(
|
||||
value: _useKanji,
|
||||
onChanged: (value) {
|
||||
setState(() {
|
||||
_useKanji = value;
|
||||
});
|
||||
},
|
||||
),
|
||||
],
|
||||
),
|
||||
],
|
||||
bottom: TabBar(
|
||||
controller: _tabController,
|
||||
tabs: const [
|
||||
@@ -62,13 +101,33 @@ class _CustomSrsScreenState extends State<CustomSrsScreen> with SingleTickerProv
|
||||
),
|
||||
),
|
||||
body: _deck.isEmpty
|
||||
? const Center(child: CircularProgressIndicator())
|
||||
: TabBarView(
|
||||
? const Center(child: Text('Add cards to start quizzing!'))
|
||||
: _reviewDeck.isEmpty
|
||||
? const Center(child: Text('No cards due for review.'))
|
||||
: TabBarView(
|
||||
controller: _tabController,
|
||||
children: [
|
||||
CustomQuizScreen(key: _quizScreenKeys[0], deck: _deck, quizMode: CustomQuizMode.japaneseToEnglish),
|
||||
CustomQuizScreen(key: _quizScreenKeys[1], deck: _deck, quizMode: CustomQuizMode.englishToJapanese),
|
||||
CustomQuizScreen(key: _quizScreenKeys[2], deck: _deck, quizMode: CustomQuizMode.listeningComprehension),
|
||||
CustomQuizScreen(
|
||||
key: _quizScreenKeys[0],
|
||||
deck: _reviewDeck,
|
||||
quizMode: CustomQuizMode.japaneseToEnglish,
|
||||
onCardReviewed: _updateCard,
|
||||
useKanji: _useKanji,
|
||||
),
|
||||
CustomQuizScreen(
|
||||
key: _quizScreenKeys[1],
|
||||
deck: _reviewDeck,
|
||||
quizMode: CustomQuizMode.englishToJapanese,
|
||||
onCardReviewed: _updateCard,
|
||||
useKanji: _useKanji,
|
||||
),
|
||||
CustomQuizScreen(
|
||||
key: _quizScreenKeys[2],
|
||||
deck: _reviewDeck,
|
||||
quizMode: CustomQuizMode.listeningComprehension,
|
||||
onCardReviewed: _updateCard,
|
||||
useKanji: _useKanji,
|
||||
),
|
||||
],
|
||||
),
|
||||
floatingActionButton: FloatingActionButton(
|
||||
|
||||
Reference in New Issue
Block a user