Flutter的shared_preferences不持久?

问题描述 投票:0回答:4

我一直在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,但没有解决方案。

flutter dart sharedpreferences
4个回答
2
投票

我假设您在代码中的某个地方遇到了 此错误,并且作为快速解决方案,您在代码中添加了

SharedPreferences.setMockInitialValues({});
,这应该是原因(除了
sharedPreferences.clear()
之外)。

SharedPreferences.setMockInitialValues({});
是阻止数据在会话之间保留的原因。

一个快速的解决方法是在代码中添加一个

try-catch
块。有些像下面这样:

try {
      prefs.getInt(YOUR_KEY_HERE);
} catch (e) {
      SharedPreferences.setMockInitialValues({});
}

但这不是解决此问题的传统方法,我建议查看Siddharth Agrawal这个答案


2
投票

你已经这样做了

final prefs = await SharedPreferences.getInstance();

final data = prefs.getString("userData");

if(data != null){

      final userData = json.dncode(userData);
}

   

1
投票

我意识到我正在应用程序中的某些位置清除我的共享偏好设置,但我已经忘记了。请检查代码中的每个位置是否有

sharedPreferences.clear()
。你永远不知道。


0
投票

检查并删除 SharedPreferences.setMockInitialValues({});从你的代码。之后就可以了。

© www.soinside.com 2019 - 2024. All rights reserved.