Flutter开发:如何让计数器在达到预设上限的最后一次点击时触发振动
问题核心原因
- 你的现有逻辑是先判断当前计数是否未达上限,再执行加1操作,计数到达上限的那次点击只会完成计数加1,不会触发振动逻辑,振动要等到下一次点击时才能检测到计数已达上限,所以会晚触发一次。
对应你设定上限为5的场景:第5次点击前_counter值为4,判断4≠5,执行加1到5,没有触发振动;第6次点击时检测到_counter=5,才会触发振动,和预期不符。
修复后的代码实现
调整判断顺序,在计数加1后立刻判断是否到达上限,到达则直接触发振动即可:
int _counter = 0; int _maxCount = 5; // 变量名语义化,后续自定义上限只要修改这个值即可 onTap: () async { setState(() { // 还没到上限时才允许计数累加 if (_counter < _maxCount) { _counter++; // 加1后刚好到达上限,立刻触发振动 if (_counter == _maxCount) { Vibration.vibrate(duration: 500); } } // 已达上限后点击不做任何操作 }); },
调整说明
- 替换原语义模糊的
_five变量为_maxCount,后续自定义上限不需要修改逻辑代码,仅调整这个变量的值即可 - 删掉了冗余的空分支和无意义的
_counter = _counter + 0代码,逻辑更简洁 - 调整后的逻辑刚好在计数累加到上限的那次点击触发振动,完全匹配需求
内容的提问来源于stack exchange,提问作者Ary Anzh
相关产品推荐
相关产品推荐

