如何在Flutter中让ElevatedButton禁用900毫秒?
Flutter按钮禁用900毫秒的实现方案
核心是通过布尔状态变量控制按钮的可点击状态,点击后立即禁用按钮,等待指定时长后恢复。具体实现如下:
1. 定义状态变量
在你的State类中添加控制按钮状态的变量:
bool _isButtonDisabled = false;
2. 绑定按钮的可点击状态
将按钮的onPressed属性与状态变量关联,禁用时设为null:
ElevatedButton( onPressed: _isButtonDisabled ? null : _handleButtonTap, child: const Text("点击按钮"), )
3. 实现点击逻辑
修改你的点击处理方法,先切换禁用状态,执行业务逻辑后等待900毫秒再恢复:
Future<void> _handleButtonTap() async { // 立即禁用按钮并更新UI setState(() { _isButtonDisabled = true; }); // 执行原有业务逻辑 incrementCounter(); await AudioPlayer().play( AssetSource(Assets.correct_answer_audio), volume: 1.0, ); _onTyping(); // 等待900毫秒 await Future.delayed(const Duration(milliseconds: 900)); // 恢复按钮可用状态并更新UI setState(() { _isButtonDisabled = false; }); // 关闭当前页面 Navigator.of(context).pop(); }
注意事项
- 必须通过
setState()更新状态变量,否则UI不会刷新,按钮状态不会变化 - 原有代码末尾多了一个多余的括号
);,需要删除以避免语法错误 - 如果音频播放是异步操作,建议加上
await确保播放完成后再进入延迟
内容的提问来源于stack exchange,提问作者Lakminee D
相关产品推荐
相关产品推荐

