additional error handling to fix freezing and/or catch error message

pull/1428/head
William Jordan-Cooley 1 year ago
parent c94e559b52
commit 10d937ed1b

@ -18,8 +18,21 @@ class TtsController {
setupTTS(); setupTTS();
} }
Future<void> dispose() async {
await tts.stop();
}
onError(dynamic message) => ErrorHandler.logError(
m: 'TTS error',
data: {
'message': message,
},
);
Future<void> setupTTS() async { Future<void> setupTTS() async {
try { try {
tts.setErrorHandler(onError);
targetLanguage ??= targetLanguage ??=
MatrixState.pangeaController.languageController.userL2?.langCode; MatrixState.pangeaController.languageController.userL2?.langCode;
@ -53,12 +66,50 @@ class TtsController {
} }
} }
Future<void> stop() async {
try {
// return type is dynamic but apparent its supposed to be 1
// https://pub.dev/packages/flutter_tts
final result = await tts.stop();
if (result != 1) {
ErrorHandler.logError(
m: 'Unexpected result from tts.stop',
data: {
'result': result,
},
);
}
} catch (e, s) {
debugger(when: kDebugMode);
ErrorHandler.logError(e: e, s: s);
}
await tts.stop();
}
Future<void> speak(String text) async { Future<void> speak(String text) async {
try {
stop();
targetLanguage ??= targetLanguage ??=
MatrixState.pangeaController.languageController.userL2?.langCode; MatrixState.pangeaController.languageController.userL2?.langCode;
await tts.stop(); final result = await tts.speak(text);
return tts.speak(text);
// return type is dynamic but apparent its supposed to be 1
// https://pub.dev/packages/flutter_tts
if (result != 1) {
ErrorHandler.logError(
m: 'Unexpected result from tts.speak',
data: {
'result': result,
'text': text,
},
);
}
} catch (e, s) {
debugger(when: kDebugMode);
ErrorHandler.logError(e: e, s: s);
}
} }
bool get isLanguageFullySupported => bool get isLanguageFullySupported =>

@ -19,7 +19,6 @@ class WordAudioButtonState extends State<WordAudioButton> {
TtsController ttsController = TtsController(); TtsController ttsController = TtsController();
@override
@override @override
void initState() { void initState() {
// TODO: implement initState // TODO: implement initState
@ -27,6 +26,12 @@ class WordAudioButtonState extends State<WordAudioButton> {
ttsController.setupTTS().then((value) => setState(() {})); ttsController.setupTTS().then((value) => setState(() {}));
} }
@override
void dispose() {
ttsController.dispose();
super.dispose();
}
@override @override
Widget build(BuildContext context) { Widget build(BuildContext context) {
return Column( return Column(

Loading…
Cancel
Save