You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Flutter秒表应用如何将Start、Stop两个按钮合并为同一个功能按钮

Flutter秒表启停按钮合并实现方案

实现思路

  • 添加状态变量标记秒表当前运行状态,按钮的UI样式、点击逻辑根据状态动态切换
  • 点击按钮时根据当前状态执行对应的启动/停止逻辑,同步更新状态刷新UI
  • 重置按钮点击时同步复位状态变量,避免状态不一致

具体修改步骤

步骤1:新增状态变量

在_MyAppState类中新增运行状态标记变量:

// 新增变量,标记秒表当前是否正在运行
bool _isRunning = false;

步骤2:替换原有启停两个按钮为单个动态按钮

找到原来的Start、Stop两个RaisedButton代码段,整体替换为以下代码:

Padding(
  padding: const EdgeInsets.symmetric(horizontal: 4),
  child: RaisedButton(
    padding: const EdgeInsets.all(4),
    // 根据运行状态切换按钮颜色
    color: _isRunning ? Colors.red : Colors.green,
    shape: const StadiumBorder(),
    onPressed: () async {
      HapticFeedback.mediumImpact();
      if (_isRunning) {
        // 当前运行中,执行停止+计次逻辑(和原有Stop按钮逻辑完全一致)
        _stopWatchTimer.onExecute.add(StopWatchExecute.lap);
        _stopWatchTimer.onExecute.add(StopWatchExecute.stop);
      } else {
        // 当前未运行,执行启动逻辑(和原有Start按钮逻辑完全一致)
        _stopWatchTimer.onExecute.add(StopWatchExecute.start);
      }
      // 更新状态刷新UI
      setState(() {
        _isRunning = !_isRunning;
      });
    },
    child: Text(
      // 根据运行状态切换按钮文本
      _isRunning ? 'Stop' : 'Start',
      style: const TextStyle(
        color: Colors.white,
        fontFamily: 'Poppins',
        fontSize: 15,
        fontWeight: FontWeight.bold,
      ),
    ),
  ),
),

步骤3:修正重置按钮逻辑,同步复位状态

找到Reset按钮的onPressed回调,修改为以下代码,避免重置后状态错乱:

onPressed: () async {
  HapticFeedback.mediumImpact();
  _stopWatchTimer.onExecute.add(StopWatchExecute.reset);
  // 重置后复位运行状态
  setState(() {
    _isRunning = false;
  });
},

功能说明

修改后完全保留原有业务逻辑:首次点击按钮启动秒表,按钮自动切换为红色Stop样式;再次点击触发计次+停止逻辑,按钮切回绿色Start样式;点击重置按钮后所有状态复位。

内容的提问来源于stack exchange,提问作者Rehan Agrawal

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.10.19 09:36:04