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
相关产品推荐
相关产品推荐

