some cleanup and some fixes
This commit is contained in:
@@ -1,9 +1,10 @@
|
||||
import 'package:flutter/material.dart';
|
||||
import 'dart:math';
|
||||
import 'package:flutter_tts/flutter_tts.dart';
|
||||
import '../models/custom_kanji_item.dart';
|
||||
import '../widgets/options_grid.dart';
|
||||
import '../widgets/kanji_card.dart';
|
||||
import 'package:provider/provider.dart';
|
||||
import '../services/tts_service.dart';
|
||||
|
||||
enum CustomQuizMode {
|
||||
japaneseToEnglish,
|
||||
@@ -38,7 +39,6 @@ class CustomQuizScreenState extends State<CustomQuizScreen>
|
||||
List<String> _options = [];
|
||||
bool _answered = false;
|
||||
bool? _correct;
|
||||
late FlutterTts _flutterTts;
|
||||
late AnimationController _shakeController;
|
||||
late Animation<double> _shakeAnimation;
|
||||
final List<String> _incorrectlyAnsweredItems = [];
|
||||
@@ -47,7 +47,6 @@ class CustomQuizScreenState extends State<CustomQuizScreen>
|
||||
void initState() {
|
||||
super.initState();
|
||||
_shuffledDeck = widget.deck.toList()..shuffle();
|
||||
_initTts();
|
||||
if (_shuffledDeck.isNotEmpty) {
|
||||
_generateOptions();
|
||||
}
|
||||
@@ -61,6 +60,11 @@ class CustomQuizScreenState extends State<CustomQuizScreen>
|
||||
);
|
||||
}
|
||||
|
||||
@override
|
||||
void didChangeDependencies() {
|
||||
super.didChangeDependencies();
|
||||
}
|
||||
|
||||
@override
|
||||
void didUpdateWidget(CustomQuizScreen oldWidget) {
|
||||
super.didUpdateWidget(oldWidget);
|
||||
@@ -82,21 +86,18 @@ class CustomQuizScreenState extends State<CustomQuizScreen>
|
||||
}
|
||||
}
|
||||
|
||||
void playAudio() {
|
||||
void playAudio() async {
|
||||
if (widget.quizMode == CustomQuizMode.listeningComprehension &&
|
||||
_currentIndex < _shuffledDeck.length) {
|
||||
_speak(_shuffledDeck[_currentIndex].characters);
|
||||
final ttsService = Provider.of<TtsService>(context, listen: false);
|
||||
await ttsService.speak(_shuffledDeck[_currentIndex].characters);
|
||||
}
|
||||
}
|
||||
|
||||
void _initTts() async {
|
||||
_flutterTts = FlutterTts();
|
||||
await _flutterTts.setLanguage("ja-JP");
|
||||
}
|
||||
|
||||
|
||||
@override
|
||||
void dispose() {
|
||||
_flutterTts.stop();
|
||||
_shakeController.dispose();
|
||||
super.dispose();
|
||||
}
|
||||
@@ -106,7 +107,8 @@ class CustomQuizScreenState extends State<CustomQuizScreen>
|
||||
if (widget.quizMode == CustomQuizMode.listeningComprehension ||
|
||||
widget.quizMode == CustomQuizMode.japaneseToEnglish) {
|
||||
_options = [currentItem.meaning];
|
||||
} else {
|
||||
}
|
||||
else {
|
||||
_options = [
|
||||
widget.useKanji && currentItem.kanji != null
|
||||
? currentItem.kanji!
|
||||
@@ -232,7 +234,8 @@ class CustomQuizScreenState extends State<CustomQuizScreen>
|
||||
}
|
||||
|
||||
if (isCorrect) {
|
||||
if (widget.quizMode == CustomQuizMode.japaneseToEnglish) {
|
||||
if (widget.quizMode == CustomQuizMode.japaneseToEnglish ||
|
||||
widget.quizMode == CustomQuizMode.englishToJapanese) {
|
||||
await _speak(currentItem.characters);
|
||||
}
|
||||
await Future.delayed(const Duration(milliseconds: 500));
|
||||
@@ -244,22 +247,24 @@ class CustomQuizScreenState extends State<CustomQuizScreen>
|
||||
_nextQuestion();
|
||||
}
|
||||
|
||||
void _nextQuestion() {
|
||||
Future<void> _nextQuestion() async {
|
||||
setState(() {
|
||||
_currentIndex++;
|
||||
_answered = false;
|
||||
_correct = null;
|
||||
if (_currentIndex < _shuffledDeck.length) {
|
||||
_generateOptions();
|
||||
if (widget.quizMode == CustomQuizMode.listeningComprehension) {
|
||||
_speak(_shuffledDeck[_currentIndex].characters);
|
||||
}
|
||||
}
|
||||
});
|
||||
if (_currentIndex < _shuffledDeck.length &&
|
||||
widget.quizMode == CustomQuizMode.listeningComprehension) {
|
||||
await _speak(_shuffledDeck[_currentIndex].characters);
|
||||
}
|
||||
}
|
||||
|
||||
Future<void> _speak(String text) async {
|
||||
await _flutterTts.speak(text);
|
||||
final ttsService = Provider.of<TtsService>(context, listen: false);
|
||||
await ttsService.speak(text);
|
||||
}
|
||||
|
||||
void _onOptionSelected(String option) {
|
||||
@@ -287,6 +292,12 @@ class CustomQuizScreenState extends State<CustomQuizScreen>
|
||||
icon: const Icon(Icons.volume_up, size: 64),
|
||||
onPressed: () => _speak(currentItem.characters),
|
||||
);
|
||||
} else if (widget.quizMode == CustomQuizMode.englishToJapanese) {
|
||||
promptWidget = Text(
|
||||
question,
|
||||
style: TextStyle(fontSize: 48, color: Theme.of(context).colorScheme.onSurface),
|
||||
textAlign: TextAlign.center,
|
||||
);
|
||||
} else {
|
||||
promptWidget = GestureDetector(
|
||||
onTap: () => _speak(question),
|
||||
|
||||
Reference in New Issue
Block a user