我可以在一个 IconButton 中执行两个操作吗?
Can I have two actions in one IconButton?
我希望在按下一个麦克风图标时启动语音转文本功能,同时启动噪音计功能。
目前,语音转文本图标和噪声计图标是分开的。
有什么办法可以把它们合并成一个图标吗?
- noise_meter
IconButton(
onPressed: () {
setState(() {
_isRecording = !_isRecording;
if (_isRecording) {
NoiseMeterHelper().start(
onData: onData,
onError: onError,
);
} else {
NoiseMeterHelper().stop();
}
});
},
icon: _isRecording ? Icon(Icons.mic) : Icon(Icons.mic),
),
- speech_to_text
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),
),
我希望在按下一个麦克风图标时启动语音转文本功能,同时启动噪音计功能。
目前,语音转文本图标和噪声计图标是分开的。 有什么办法可以把它们合并成一个图标吗?
- noise_meter
IconButton(
onPressed: () {
setState(() {
_isRecording = !_isRecording;
if (_isRecording) {
NoiseMeterHelper().start(
onData: onData,
onError: onError,
);
} else {
NoiseMeterHelper().stop();
}
});
},
icon: _isRecording ? Icon(Icons.mic) : Icon(Icons.mic),
),
- speech_to_text
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),
),