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

Flutter中SharedPreferences无法保存数据问题求助

问题排查与解决

核心问题:错误使用测试初始化方法

你在checkLogin函数里调用了SharedPreferences.setMockInitialValues({});,这个方法只应该在单元测试场景中使用,在正式运行的APP里执行这行代码会强制重置SharedPreferences的初始状态,直接导致你登录时保存的test值被清空,所以每次进入Homepage都读不到数据。

解决步骤:

  1. 移除测试初始化代码
    删掉checkLogin里的SharedPreferences.setMockInitialValues({});,修改后的函数如下:
void checkLogin(context) async {
  final prefs = await SharedPreferences.getInstance();
  var data = await prefs.getBool('test');
  debugPrint(data.toString());
  if (user_data['email'] == null) {
    Navigator.pushReplacement(
      context,
      PageRouteBuilder(
        pageBuilder: (context, animation1, animation2) => LoginPage(),
        transitionDuration: Duration.zero,
      ),
    );
  }
}
  1. 确保保存操作完成后再跳转
    登录函数里的prefs.setBool是异步操作,必须加await确保数据保存完成后再跳转到Homepage,否则可能出现还没保存就跳转、读不到数据的情况:
user_data = apiReturn['user_data'] as Map;
jwt = apiReturn['tokens'];
final prefs = await SharedPreferences.getInstance();
await prefs.setBool('test', true); // 加上await保证保存完成
// 之后再执行跳转到Homepage的逻辑
  1. 额外检查点
    • 确认登录成功后确实执行了保存代码,没有被分支逻辑跳过
    • 可以在保存后立即读取一次test值并打印,验证保存是否成功
    • 同步user_data的状态判断和SharedPreferences的逻辑,避免因状态变量的判断覆盖持久化数据的检查

内容的提问来源于stack exchange,提问作者Elia Driesner

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.19 05:35:09