我一直在flutter中使用shared_preferences,到目前为止工作正常。突然间,它在 iOS 和 Android 上都停止工作了。我一步步调试它,它将数据存储到 pref,当应用程序打开时,数据仍然存在,但热重启后 _preferencecache 始终为空。我该如何解决这个问题? (版本是0.5.12)
当用户登录时,我保存 user_id:
final prefs = await SharedPreferences.getInstance();
final userData = json.encode(
{
'user_id': userID,
},
);
prefs.setString('userData', userData);
稍后,当用户再次重新启动时:
final prefs = await SharedPreferences.getInstance();
if (!prefs.containsKey('userData')) {
// print("no user data in shared preference");
return false;
}
但是abpve函数返回false,这就是问题所在,我也检查了以前版本的shared_preferences,但没有解决方案。
我假设您在代码中的某个地方遇到了 此错误,并且作为快速解决方案,您在代码中添加了
SharedPreferences.setMockInitialValues({});
,这应该是原因(除了 sharedPreferences.clear()
之外)。
SharedPreferences.setMockInitialValues({});
是阻止数据在会话之间保留的原因。
一个快速的解决方法是在代码中添加一个
try-catch
块。有些像下面这样:
try {
prefs.getInt(YOUR_KEY_HERE);
} catch (e) {
SharedPreferences.setMockInitialValues({});
}
但这不是解决此问题的传统方法,我建议查看Siddharth Agrawal的这个答案。
你已经这样做了
final prefs = await SharedPreferences.getInstance();
final data = prefs.getString("userData");
if(data != null){
final userData = json.dncode(userData);
}
我意识到我正在应用程序中的某些位置清除我的共享偏好设置,但我已经忘记了。请检查代码中的每个位置是否有
sharedPreferences.clear()
。你永远不知道。
检查并删除 SharedPreferences.setMockInitialValues({});从你的代码。之后就可以了。