https://pub.dev/packages/speech_to_text/example 에서 speech_to_text 예제를 따라해보고 있습니다.
Start 버튼을 누르면 startListening 함수가 실행되는데 이 안에서 setState 없이 lastWords= ' ' 로만 바꿔도 화면이 재로딩되어 기존에 있던 텍스트가 없어지게 됩니다.
speech.listen(
onResult: resultListener,
...)
에서 resultListener 를 따라가보면 얘는 lastWords 를 setState 를 통해 변환해서 혹시 얘 때문에 setState() 없이도 화면이 업데이트되는 효과가 있나 의심이 들었습니다. 하지만 speech.listen() 을 주석처리해보아도 lastWords= ' '가 화면에 있던 글씨를 지우는 효과를 만들어내더라구요.
혹시 setState() 없이도 렌더링 다시되는 특별규칙? 이 있는걸까요?
void startListening() {
_logEvent('start listening');
lastWords = '';
lastError = '';
// Note that listenFor
is the maximum, not the minimun, on some
// recognition will be stopped before this value is reached.
// Similarly pauseFor
is a maximum not a minimum and may be ignored
// on some devices.
speech.listen(
onResult: resultListener,
listenFor: Duration(seconds: 30),
pauseFor: Duration(seconds: 5),
partialResults: true,
localeId: _currentLocaleId,
onSoundLevelChange: soundLevelListener,
cancelOnError: true,
listenMode: ListenMode.confirmation);
setState(() {});
}