add custom srs
This commit is contained in:
85
lib/src/screens/custom_srs_screen.dart
Normal file
85
lib/src/screens/custom_srs_screen.dart
Normal file
@@ -0,0 +1,85 @@
|
||||
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 {
|
||||
const CustomSrsScreen({super.key});
|
||||
|
||||
@override
|
||||
State<CustomSrsScreen> createState() => _CustomSrsScreenState();
|
||||
}
|
||||
|
||||
class _CustomSrsScreenState extends State<CustomSrsScreen> with SingleTickerProviderStateMixin {
|
||||
late TabController _tabController;
|
||||
final _deckRepository = CustomDeckRepository();
|
||||
List<CustomKanjiItem> _deck = [];
|
||||
final _quizScreenKeys = [
|
||||
GlobalKey<CustomQuizScreenState>(),
|
||||
GlobalKey<CustomQuizScreenState>(),
|
||||
GlobalKey<CustomQuizScreenState>(),
|
||||
];
|
||||
|
||||
@override
|
||||
void initState() {
|
||||
super.initState();
|
||||
_tabController = TabController(length: 3, vsync: this);
|
||||
_tabController.addListener(() {
|
||||
if (_tabController.indexIsChanging) {
|
||||
final key = _quizScreenKeys[_tabController.index];
|
||||
key.currentState?.playAudio();
|
||||
}
|
||||
});
|
||||
_loadDeck();
|
||||
}
|
||||
|
||||
@override
|
||||
void dispose() {
|
||||
_tabController.dispose();
|
||||
super.dispose();
|
||||
}
|
||||
|
||||
Future<void> _loadDeck() async {
|
||||
final deck = await _deckRepository.getCustomDeck();
|
||||
setState(() {
|
||||
_deck = deck;
|
||||
});
|
||||
}
|
||||
|
||||
@override
|
||||
Widget build(BuildContext context) {
|
||||
return Scaffold(
|
||||
appBar: AppBar(
|
||||
title: const Text('Custom SRS'),
|
||||
bottom: TabBar(
|
||||
controller: _tabController,
|
||||
tabs: const [
|
||||
Tab(text: 'Jpn→Eng'),
|
||||
Tab(text: 'Eng→Jpn'),
|
||||
Tab(text: 'Listening'),
|
||||
],
|
||||
),
|
||||
),
|
||||
body: _deck.isEmpty
|
||||
? const Center(child: CircularProgressIndicator())
|
||||
: 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),
|
||||
],
|
||||
),
|
||||
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