Flutter+Firebase测验应用无法点击错误选项代码问题排查
问题根因
你遇到的点击错误选项无响应问题,核心是checkAnswerAndUpdate方法的逻辑存在两个明显缺陷:
- 逻辑分支覆盖不全:现有代码仅在点击正确答案(传入参数
value == true)时才会调用setState更新界面状态,点击错误答案时没有任何状态更新操作,不会触发界面重绘,自然看不到选中效果。 - 重复点击拦截状态赋值错误:
isAlreadySelected变量的作用是标记当前题目是否已经完成选择,避免重复点击选项,但你在选完答案后将其赋值为false,等于这个拦截逻辑完全失效。
另外你写的startOver方法也存在逻辑问题:方法内仅在setState中写了一个孤立的Text组件,没有做任何状态重置或页面跳转操作,调用后不会产生任何实际效果。
修复方案
将checkAnswerAndUpdate方法替换为以下逻辑即可:
void checkAnswerAndUpdate(bool value) { if (isAlreadySelected) { return; } setState(() { isPressed = true; // 选完答案后标记为已选择,阻止同一题重复点击 isAlreadySelected = true; // 仅选中正确答案时加分 if (value == true) { score++; } }); }
修复后无论点击正确还是错误选项,都会触发界面重绘,按照你预设的规则给正确选项显示correct颜色、错误选项显示incorrect颜色,同时阻止同一题重复选择。
如果需要让startOver方法正常生效,可以补全重置逻辑:
void startOver() { setState(() { index = 0; score = 0; isPressed = false; isAlreadySelected = false; }); // 关闭结果弹窗回到答题页 Navigator.pop(context); }
内容的提问来源于stack exchange,提问作者Great
相关产品推荐
相关产品推荐

