У меня проблема с пакетом Flutter Text To Speech.При нажатии на FloatingActionButton я хотел бы говорить / играть несколько строк (с разными речевыми скоростями) впоследствии.Однако при этом я могу слышать только последнюю строку, которую я передал в функцию, а не первую.
Как вы можете видеть из приведенного ниже кода, я попытался использовать асинхронностьпрограммирование (асинхронное / ожидание).
import 'package:flutter/material.dart';
import 'dart:async';
import 'package:flutter_tts/flutter_tts.dart';
class SpeakerClass extends StatefulWidget{
@override
State<StatefulWidget> createState() {
// TODO: implement createState
return _SpeakerClassState();
}
}
class _SpeakerClassState extends State<SpeakerClass>{
String text1 = 'eins';
String text2 = 'zwei';
String text3 = 'drei';
String text4 = 'vier';
String currentTtsString;
double ttsSpeechRate1 = 0.5;
double ttsSpeechRate2 = 1.0;
double currentSpeechRate;
Future playTtsString1() async {
currentTtsString = text1;
currentSpeechRate = ttsSpeechRate1;
await runTextToSpeech(currentTtsString, currentSpeechRate);
return null;
}
Future playTtsString2() async {
currentTtsString = text2;
currentSpeechRate = ttsSpeechRate2;
await runTextToSpeech(currentTtsString, currentSpeechRate);
return null;
}
@override
Widget build(BuildContext context) {
return Scaffold(
body: FloatingActionButton (
backgroundColor: Colors.blue,
child: Icon(Icons.volume_up, color: Colors.white),
onPressed: () async {
await playTtsString1();
await playTtsString2();
},
)
);
}
}
Future<void> runTextToSpeech(String currentTtsString, double currentSpeechRate) async {
FlutterTts flutterTts;
flutterTts = new FlutterTts();
await flutterTts.setLanguage("en-GB");
await flutterTts.setVolume(1.0);
await flutterTts.setPitch(1.0);
await flutterTts.isLanguageAvailable("en-GB");
await flutterTts.setSpeechRate(currentSpeechRate);
await flutterTts.speak(currentTtsString);
}
При нажатии кнопки FloatingAction я ожидаю, что программа сначала выполнит функцию playTtsString1 («eins» со скоростью 0,5), а затем функцию playTtsString2 («zwei» со скоростью 1).
Однако почему-то я слышу только программу, говорящую "zwei".Я полагаю, что программа не ожидает завершения первой функции playTtsString1 и уже выполняет вторую функцию playTtsString2.Буду очень признателен за любую помощь в этом вопросе!