flutter 扑动共享_首选项不持久?

lmvvr0a8  于 2023-01-06  发布在  Flutter
关注(0)|答案(3)|浏览(180)

我一直在flutter中使用shared_preference,直到现在还工作得很好。突然它停止工作,在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,但是没有解决方案。

soat7uwm

soat7uwm1#

你必须这样做

final prefs = await SharedPreferences.getInstance();

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

if(data != null){

      final userData = json.dncode(userData);
}
cczfrluj

cczfrluj2#

我意识到我在应用程序的某个地方清除了我的共享首选项,但我忘记了。请检查代码中sharedPreferences.clear()的每个地方。你永远不会知道。

fcy6dtqo

fcy6dtqo3#

我假设在您的代码中的某个地方,您遇到了this error,作为一个快速的解决方案,您在代码中添加了SharedPreferences.setMockInitialValues({});,这应该是原因(而不是sharedPreferences.clear())。
SharedPreferences.setMockInitialValues({});是阻止数据在会话之间持久化的原因。
一个快速的解决方法是在代码中添加一个try-catch块,如下所示:

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

但这不是解决这个问题的常规方法,我建议按Siddharth Agrawal检查this answer

相关问题