Flutter中SharedPreferences无法保存数据问题求助
问题排查与解决
核心问题:错误使用测试初始化方法
你在checkLogin函数里调用了SharedPreferences.setMockInitialValues({});,这个方法只应该在单元测试场景中使用,在正式运行的APP里执行这行代码会强制重置SharedPreferences的初始状态,直接导致你登录时保存的test值被清空,所以每次进入Homepage都读不到数据。
解决步骤:
- 移除测试初始化代码
删掉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, ), ); } }
- 确保保存操作完成后再跳转
登录函数里的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的逻辑
- 额外检查点
- 确认登录成功后确实执行了保存代码,没有被分支逻辑跳过
- 可以在保存后立即读取一次
test值并打印,验证保存是否成功 - 同步
user_data的状态判断和SharedPreferences的逻辑,避免因状态变量的判断覆盖持久化数据的检查
内容的提问来源于stack exchange,提问作者Elia Driesner
相关产品推荐
相关产品推荐

