如何清除flutter中除2个Key之外的所有SharedPreferences键

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

我试图在注销期间清除 SharedPreferences 的所有键值,除了 2 个键

"EmailID"
"Password"
之外。我们知道,flutter 中只允许使用单个 SharedPreferences 实例,因此我无法创建不同的实例来存储
"EmailID"
"Password"
并删除特定键并不是删除 20 个以上键的好做法。如果我使用
prefs.clear();
这将清除所有关键值任何帮助非常感谢。

flutter dart sharedpreferences
3个回答
19
投票

没有办法避免这种情况,你必须一一清除这些值。

您必须迭代共享首选项键并避免您不想清除的键。

 SharedPreferences preferences = await SharedPreferences.getInstance();
        for(String key in preferences.getKeys()) {
          if(key != "email" && key!= "password") {
            preferences.remove(key);
          }
        }

3
投票

另一种简单的方法如下:

 String _email    = prefs.email;
 String _password = prefs.password;

 prefs.clear();
 prefs.email      = _email;
 prefs.password   = _password;

根据 SharedPreferences 中的信息量,这可能是比迭代每个键更有效的函数

附注不建议在 SharedPreferences 中存储密码。


0
投票

创建一个列表来保存您想要保留的密钥

final List<String> keysToKeep = ['Password', 'EmailID',]

然后从共享首选项中获取所有存储的密钥

final Set<String>? allKeys = preferences?.getKeys();

您可以使用差异法从所有键中排除这些键

https://api.flutter.dev/flutter/dart-core/Set/difference.html

  final Set<String> keysToRemove = allKeys.difference(keysToKeep.toSet());

  for (final key in keysToRemove) {
    log('Removing key: $key');
    preferences!.remove(key);
  }
© www.soinside.com 2019 - 2024. All rights reserved.