flutter - 在 Dart / Flutter 中等待回调完成
问题描述
目前正在使用flutter_tts库编写一个flutter 应用程序。
我有一个要读出的句子列表,但目前无法等待setCompletionHandler()完成。
在继续下一个字符串之前,如何等待setCompletionHandler()回调完成?目前,TTS.speak()函数立即结束,while 循环立即递增,因此它只读出列表中的最后一个句子。
// code shortened for brevity
FlutterTts TTS;
TtsState ttsState = TtsState.stopped;
get isPlaying => ttsState == TtsState.playing;
get isStopped => ttsState == TtsState.stopped;
List<String> sentences = ['Hello, World', 'How are you?', 'The quick brown fox jumps over the lazy dog'];
@override
void initState() {
super.initState();
TTS = FlutterTts();
}
void readOutSentences(sentences) async {
int i = 0;
bool readCompleted = false;
while (i < sentences.length) {
readCompleted = await runSpeak(sentences[i].toString());
if (readCompleted)
i++;
}
}
Future<bool> runSpeak(String currentSentence) async {
TTS.setStartHandler(() {
setState(() {
ttsState = TtsState.playing;
});
});
TTS.setCompletionHandler(() {
setState(() {
ttsState = TtsState.stopped;
});
});
await TTS.speak(currentSentence);
return true;
}
readOutSentences(sentences);
解决方案
原谅 setCompletionHandler)
您可以使用这样的异步函数:
Future<void> _speak(String _text) async {
if (_text != null && _text.isNotEmpty) {
await flutterTts.awaitSpeakCompletion(true);
await flutterTts.speak(_text);
}
}
readAllSentencesList(List<String> allSentences) async {
for (int i=0; i<allSentences.length; i++){
await _speak(allSentences[i]);
}
}
不要忘记使用最后一个 flutter_tts 库!
推荐阅读
- emgucv - EmguCV - 创建后垫不为空
- reactjs - Firebase Firestore 服务器时间戳而不将所有 Firebase 导入我的网络项目?
- google-cloud-platform - 会话断开后删除的 Google Cloud VM 文件
- angular - 接口对象属性未定义,但有角度值
- javascript - 如何制作排序功能来解决这个问题?
- android - 为什么我的应用程序不要求确认退出?
- c# - 你如何从 C# 中的 node.js 网站读取数据?
- javascript - MVC 部分限制非管理员用户的视图访问
- python - 如何在python 3中将对象入队和出队
- c# - BackgroundService 未关闭,stopToken 从未使用 .net 核心通用主机设置