各位。。。。。我如何使用语音转文本提供程序,以便在多个小部件中多次使用它?我的语音转文本阅读每个应用程序会话只能启动一次。。。。我知道我需要将它用作提供者类,但我不知道如何使用。。
我尝试了语音转文本,但它对我来说不起作用,因为我需要在多个小部件中使用它,并且我希望能够使用回调";onstatus";以及";oneror;
我不知道还能说什么,因为它要求我键入一定数量的字母
在根/第一类中将语音初始化为文本。
final SpeechToText speech = SpeechToText();
late SpeechToTextProvider speechProvider;
在initState中,初始化speechProvider并将语音实例传递给它。
speechProvider = SpeechToTextProvider(speech);
await speechProvider.initialize(); // do it in any other method and call it from initState.
在根小部件中,添加ChangeNotificationProvider并传递SpeechToTextProvider类。
ChangeNotifierProvider<SpeechToTextProvider>.value(
value: speechProvider,
child: ///
现在,您可以在项目中的任意位置使用speechToTextProvider。
现在,为了在项目中的任何地方使用它,您必须在要使用它的类中初始化speechToTextProvider。
late SpeechToTextProvider speechToTextProvider;
speechToTextProvider = Provider.of<SpeechToTextProvider>(context); // do it in a didChangeDependency or any other method and call it from initState.
现在为了开始收听
speechToTextProvider.listen(
pauseFor: Duration(seconds: 5),
localeId: 'en-us',
listenFor: Duration(seconds: 5));
StreamSubscription<SpeechRecognitionEvent> subscription =
speechToTextProvider.stream.listen(
(event) {
// on every change it update
if (event.eventType ==
SpeechRecognitionEventType.partialRecognitionEvent) {
if (mounted) {
_setState!(
() {
toDisplayText =
speechToTextProvider.lastResult!.recognizedWords; // the textField or Text Widget Will be updated
},
);
}
}
//on error
else if (event.eventType == SpeechRecognitionEventType.errorEvent) {
///on error if some error occurs then close the dilog box here . or stop the listner
}
}
//on done
else if (event.eventType ==
SpeechRecognitionEventType.finalRecognitionEvent) {
//when the user stop speaking.
}
},
);
}
通过这种方式,您可以在任何类或小部件中使用它。你必须在其他课上重复开始听的过程。