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

Flutter计算器应用个位数计算异常Bug求助

Flutter计算器个位数计算错误修复

你的计算器在个位数计算时结果异常(比如9-3得到0),但多位数计算正常,问题出在clickNumber函数的逻辑漏洞:

当输入单个数字时(如9),仅更新了screenNumber显示,但没有同步更新calcNumber变量,导致calcNumber始终是初始值0。点击运算符后,calcNumber2被赋值为0;再输入第二个个位数(如3),同样未更新calcNumber,最终计算0-0得到错误结果。而多位数计算时,第二次输入数字会触发else分支更新calcNumber,因此功能正常。

修复方案

修改clickNumber函数,确保每次输入数字后都同步更新calcNumber,同时合并重复的setState调用(减少不必要的UI重绘):

void clickNumber(String textTile) {
  setState(() {
    if (screenNumber == '0') {
      screenNumber = textTile;
    } else {
      screenNumber += textTile;
    }
    // 每次更新屏幕数字后,同步更新calcNumber
    calcNumber = double.parse(screenNumber);
  });
}

额外优化建议

  1. 移除getResult函数开头多余的setState调用:

    void getResult() {
      // 移除此行:setState(() => screenNumber = calcNumber.toString());
      switch (option) {
        case '/':
          setState(() {
            calcNumber = calcNumber2 / calcNumber;
            screenNumber = calcNumber.toString();
          });
          break;
        case '+':
          setState(() {
            calcNumber = calcNumber2 + calcNumber;
            screenNumber = calcNumber.toString();
          });
          break;
        case '-':
          setState(() {
            calcNumber = calcNumber2 - calcNumber;
            screenNumber = calcNumber.toString();
          });
          break;
      }
      setState(() => screenNumber2 = '');
    }
    
  2. 补充getCurrentOption函数中运算符的保存逻辑(否则后续计算可能无法正确识别运算符):

    void getCurrentOption(String selectedOption) {
      setState(() {
        calcNumber2 = calcNumber;
        screenNumber2 = screenNumber;
        screenNumber = '0';
        option = selectedOption; // 保存当前选择的运算符
      });
    }
    

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.17 04:40:22