我可以在一个 IconButton 中执行两个操作吗?

Can I have two actions in one IconButton?

我希望在按下一个麦克风图标时启动语音转文本功能,同时启动噪音计功能。

目前,语音转文本图标和噪声计图标是分开的。 有什么办法可以把它们合并成一个图标吗?

IconButton(
    onPressed: () {
        setState(() {
            _isRecording = !_isRecording;

            if (_isRecording) {
                NoiseMeterHelper().start(
                    onData: onData,
                    onError: onError,
                );
            } else {
                NoiseMeterHelper().stop();
            }
        });
    },
    icon: _isRecording ? Icon(Icons.mic) : Icon(Icons.mic),
),
IconButton(
    onPressed: recognizing ? stopRecording : streamingRecognize,
    icon: recognizing
        ? Icon(Icons.mic, color: Colors.red, size: 30)
        : Icon(Icons.mic, color: Colors.blue,size: 30)
),

您可以在一个 onPressed 函数中 运行 任意数量的函数。

此外,您不必使用 setState() 到 运行 函数。 setState 用于更新 class 变量并使用这些更改重建 UI。

如果您要显示 _isRecording 或使用它来更新任何 UI,请将其包裹在 setState 中。如果不是,则无需使用 setState。另外,请注意 setState 的不正确使用将导致多次不必要的 UI 重建。

试试这个,

IconButton(
    onPressed: () {
        setState(() {
            _isRecording = !_isRecording;
        });

        if (_isRecording) {
            NoiseMeterHelper().start(
                onData: onData,
                onError: onError,
            );
        } else {
            NoiseMeterHelper().stop();
        }
        recognizing ? stopRecording() : streamingRecognize();
    },
    icon: _isRecording ? Icon(Icons.mic) : Icon(Icons.mic),
),