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

Flutter饮品追踪器:如何在数值即将低于0时将其设为0?

饮品追踪器递减计数器问题解决方案

问题根源

原代码的逻辑错误在于:递减操作时先判断当前组件状态的_counter值,而非计算递减后的结果是否小于0。比如当前存储的数值是500ml,点击移除750ml时,会直接执行500-750=-250并存入SharedPreferences,直到下次点击递减按钮时才会触发归零逻辑,这不符合需求。

修复后的代码

Future<void> _decrementCounter({required int amount}) async {
  final prefs = await SharedPreferences.getInstance();
  final currentValue = prefs.getInt('counter') ?? 0;
  
  // 计算递减后的值,确保不低于0
  int newValue = currentValue - amount;
  if (newValue < 0) {
    newValue = 0;
  }
  
  // 先更新存储,再同步UI状态
  await prefs.setInt('counter', newValue);
  setState(() {
    _counter = newValue;
  });
}

核心修改点

  • 优先从SharedPreferences获取真实存储值,避免组件状态_counter和存储数据不同步的问题
  • 先计算递减后的结果,再判断是否小于0,直接将负数结果修正为0
  • 调整执行顺序:先完成SharedPreferences的存储更新,再调用setState同步UI状态,保证数据一致性

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.18 14:55:16