0

当我运行应用程序时,我正在使用颤动的 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 被调用。但是第一次它运行完美,而第二次它却造成了混乱。

4

0 回答 0