change a bunch of stuff, seperate tracking for progress, updated custom srs layout
This commit is contained in:
@@ -1,7 +1,6 @@
|
||||
import 'package:flutter/material.dart';
|
||||
import '../models/custom_kanji_item.dart';
|
||||
import '../services/custom_deck_repository.dart';
|
||||
import 'add_card_screen.dart';
|
||||
import 'custom_quiz_screen.dart';
|
||||
|
||||
class CustomSrsScreen extends StatefulWidget {
|
||||
@@ -15,7 +14,6 @@ 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>(),
|
||||
@@ -45,17 +43,8 @@ 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;
|
||||
});
|
||||
}
|
||||
|
||||
@@ -64,7 +53,6 @@ class _CustomSrsScreenState extends State<CustomSrsScreen> with SingleTickerProv
|
||||
if (index != -1) {
|
||||
setState(() {
|
||||
_deck[index] = item;
|
||||
_reviewDeck.removeWhere((element) => element.characters == item.characters);
|
||||
});
|
||||
await _deckRepository.saveDeck(_deck);
|
||||
}
|
||||
@@ -72,6 +60,29 @@ class _CustomSrsScreenState extends State<CustomSrsScreen> with SingleTickerProv
|
||||
|
||||
@override
|
||||
Widget build(BuildContext context) {
|
||||
final now = DateTime.now();
|
||||
final jpnToEngReviewDeck = _deck.where((item) {
|
||||
if (!item.useInterval) return true;
|
||||
return item.srsData.japaneseToEnglishNextReview == null ||
|
||||
item.srsData.japaneseToEnglishNextReview!.isBefore(now);
|
||||
}).toList();
|
||||
|
||||
final engToJpnReviewDeck = _deck.where((item) {
|
||||
if (!item.useInterval) return true;
|
||||
return item.srsData.englishToJapaneseNextReview == null ||
|
||||
item.srsData.englishToJapaneseNextReview!.isBefore(now);
|
||||
}).toList();
|
||||
|
||||
final listeningReviewDeck = _deck.where((item) {
|
||||
if (!item.useInterval) return true;
|
||||
return item.srsData.listeningComprehensionNextReview == null ||
|
||||
item.srsData.listeningComprehensionNextReview!.isBefore(now);
|
||||
}).toList();
|
||||
|
||||
final allDecksEmpty = jpnToEngReviewDeck.isEmpty &&
|
||||
engToJpnReviewDeck.isEmpty &&
|
||||
listeningReviewDeck.isEmpty;
|
||||
|
||||
return Scaffold(
|
||||
appBar: AppBar(
|
||||
title: const Text('Custom SRS'),
|
||||
@@ -102,43 +113,37 @@ class _CustomSrsScreenState extends State<CustomSrsScreen> with SingleTickerProv
|
||||
),
|
||||
body: _deck.isEmpty
|
||||
? const Center(child: Text('Add cards to start quizzing!'))
|
||||
: _reviewDeck.isEmpty
|
||||
: allDecksEmpty
|
||||
? const Center(child: Text('No cards due for review.'))
|
||||
: TabBarView(
|
||||
controller: _tabController,
|
||||
children: [
|
||||
CustomQuizScreen(
|
||||
key: _quizScreenKeys[0],
|
||||
deck: _reviewDeck,
|
||||
deck: jpnToEngReviewDeck,
|
||||
quizMode: CustomQuizMode.japaneseToEnglish,
|
||||
onCardReviewed: _updateCard,
|
||||
useKanji: _useKanji,
|
||||
isActive: _tabController.index == 0,
|
||||
),
|
||||
CustomQuizScreen(
|
||||
key: _quizScreenKeys[1],
|
||||
deck: _reviewDeck,
|
||||
deck: engToJpnReviewDeck,
|
||||
quizMode: CustomQuizMode.englishToJapanese,
|
||||
onCardReviewed: _updateCard,
|
||||
useKanji: _useKanji,
|
||||
isActive: _tabController.index == 1,
|
||||
),
|
||||
CustomQuizScreen(
|
||||
key: _quizScreenKeys[2],
|
||||
deck: _reviewDeck,
|
||||
deck: listeningReviewDeck,
|
||||
quizMode: CustomQuizMode.listeningComprehension,
|
||||
onCardReviewed: _updateCard,
|
||||
useKanji: _useKanji,
|
||||
isActive: _tabController.index == 2,
|
||||
),
|
||||
],
|
||||
),
|
||||
floatingActionButton: FloatingActionButton(
|
||||
onPressed: () async {
|
||||
await Navigator.of(context).push(
|
||||
MaterialPageRoute(builder: (_) => const AddCardScreen()),
|
||||
);
|
||||
_loadDeck();
|
||||
},
|
||||
child: const Icon(Icons.add),
|
||||
),
|
||||
);
|
||||
}
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user