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

Flutter中SharedPreferences失效求助:重启应用后数据丢失

问题分析与解决方案

你的代码核心问题出在_incrementCounter方法的逻辑上:

  • 每次点击都重复从SharedPreferences读取分数,既没必要也可能引发状态不同步
  • 将异步的scoreData.setInt放在setState回调内,而setState是同步更新UI的方法,这种写法会导致存储操作与UI更新顺序混乱,进而可能出现数据未正确持久化的情况

修正后的代码

加载分数的方法(可保留原逻辑)

@override
void initState() {
  super.initState();
  _loadScore();
}

void _loadScore() async {
  final SharedPreferences scoreData = await SharedPreferences.getInstance();
  setState(() {
    _score = scoreData.getInt('score') ?? 0;
  });
}

修正后的计数器递增方法

void _incrementCounter() async {
  final SharedPreferences scoreData = await SharedPreferences.getInstance();
  // 基于内存中当前的_score计算新值,避免重复读取存储
  final int newScore = _score + 1;
  // 先完成持久化存储,再更新UI状态
  await scoreData.setInt('score', newScore);
  setState(() {
    _score = newScore;
  });
}

额外注意事项

  • 确认已在pubspec.yaml中正确添加shared_preferences依赖,并执行过flutter pub get
  • 若在Android平台遇到应用完全退出后数据丢失,可尝试在退出时主动调用scoreData.commit()(不过setInt本身已默认异步提交,多数场景下无需额外操作)

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.19 14:55:19