当我运行应用程序时,我正在使用颤动的 Speech_to_text 库来收听并执行一些操作,一切都保持完美,但是当我转到上一个屏幕然后再次返回时,状态没有改变并且总是从我的 cubit 类运行 InitState 方法,但该功能运行完美,只是状态没有改变。请帮我。这是我的用户界面代码,
onTap: () {
checkMicState(context)
},
checkMicState(BuildContext context) {
setState(() {
mic = !mic;
listen(context);
});
}
listen(BuildContext context) async {
if (mic) {
bool available = await speech.initialize(
onStatus: (val) {
print(val);
switch (val) {
case 'listening':
BlocProvider.of<SearchCubit>(context).updateListening();
break;
case 'not listening':
BlocProvider.of<SearchCubit>(context).updateNotListening();
setState(() {
mic = false;
});
break;
case 'done':
BlocProvider.of<SearchCubit>(context).updateNotListening();
setState(() {
mic = false;
});
if (_text.length > 2) {
fetchResults(context, _text);
}
break;
default:
break;
}
},
onError: (val) => 'onError: $val',
);
if (available) {
setState(() => mic = true);
speech.listen(
onResult: (val) {
setState(() {
_text = val.recognizedWords;
});
if (_text.length > 0) {
BlocProvider.of<SearchCubit>(context)
.updateText(val.recognizedWords);
}
},
);
}
} else {
setState(() => mic = false);
speech.stop();
}
}
在这个监听方法中,主要问题是创建,我已经打印了值,值是正确的“正在监听”,但是状态没有被称为“UpdateListening”,而不是我的肘部的这个 InitState 被调用。但是第一次它运行完美,而第二次它却造成了混乱。