【发布时间】:2019-09-22 03:56:16
【问题描述】:
我对 Flutter Text To Speech 包有疑问。 单击 FloatingActionButton 时,我想随后说出/播放几个字符串(具有不同的 Speechrates)。但是,这样做时,我只能听到传递给函数的最后一个字符串,而不是第一个。
正如您在下面的代码中看到的,我尝试使用异步编程(async / await)。
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);
}
当按下 FloatingActionButton 时,我希望程序首先执行函数 playTtsString1(“eins”,速度为 0.5),然后执行函数 playTtsString2(“zwei”,速度为 1)。
但是,不知怎的,我只能听到程序说“zwei”。我猜程序不是在等待第一个函数“playTtsString1”完成,而是已经执行了第二个函数“playTtsString2”。在这件事上我真的很感激任何帮助!
【问题讨论】:
标签: dart flutter async-await text-to-speech future