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); }); }
额外优化建议
移除
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 = ''); }补充
getCurrentOption函数中运算符的保存逻辑(否则后续计算可能无法正确识别运算符):void getCurrentOption(String selectedOption) { setState(() { calcNumber2 = calcNumber; screenNumber2 = screenNumber; screenNumber = '0'; option = selectedOption; // 保存当前选择的运算符 }); }
内容的提问来源于stack exchange,提问作者Pochmann
相关产品推荐
相关产品推荐

