如何在Dart中正确处理SpeechToText



因此,在我的Flutter项目中,我有两条路线,第二条使用SpeechToText包。当我第一次从第一条路由转到第二条路由时,一切都很好,但当我返回并再次转到第二个路由时,onStatus方法在应该调用的时候没有被调用。

我做了一些调试,发现如下:onStatus方法设置在SpeechToText().initialize方法中。如果变量_initWorked为false,则初始化方法。但是,当我第二次打开路由时,变量已经设置为true,尽管我有一个完全不同的SpeechToText实例。

这让我认为它仍然是在操作系统级别上激活的。但我就是找不到完全处理它的方法。有没有办法这样做,是包本身的错误,还是因为完全不同的东西?

如有任何帮助,我们将不胜感激:(

SpeechToTextSingleton,您总是得到相同的实例
https://github.com/csdcorp/speech_to_text/blob/1a0864910db88eb83cdde113b447baa7405eaa7e/speech_to_text/lib/speech_to_text.dart#L89
源代码片段

class SpeechToText {
...
static final SpeechToText _instance = SpeechToText.withMethodChannel(); 
...
factory SpeechToText() => _instance;

要处理SpeechToText,您可以调用stop()
,它将调用destroyRecognizer()并执行speechRecognizer?.destroy();speechRecognizer = null;
https://github.com/csdcorp/speech_to_text/blob/1a0864910db88eb83cdde113b447baa7405eaa7e/speech_to_text/android/src/main/kotlin/com/csdcorp/speech_to_text/SpeechToTextPlugin.kt#L511
Android源代码片段

public class SpeechToTextPlugin : ...
...
private var speechRecognizer: SpeechRecognizer? = null
...
"stop" -> stopListening(result)     
...
private fun stopListening(result: Result) {
if (sdkVersionTooLow() || isNotInitialized() || isNotListening()) {
result.success(false)
return
}
debugLog("Stop listening")
handler.post {
run {
speechRecognizer?.stopListening()
}
}
if ( !recognizerStops ) {
destroyRecognizer()
}
notifyListening(isRecording = false)
result.success(true)
debugLog("Stop listening done")
}       
...
private fun destroyRecognizer() {
handler.postDelayed( {
run {
debugLog("Recognizer destroy")
speechRecognizer?.destroy();
speechRecognizer = null;
}
}, 50 )
}

最新更新