我试图在注销期间清除 SharedPreferences 的所有键值,除了 2 个键
"EmailID"
和 "Password"
之外。我们知道,flutter 中只允许使用单个 SharedPreferences 实例,因此我无法创建不同的实例来存储 "EmailID"
和 "Password"
并删除特定键并不是删除 20 个以上键的好做法。如果我使用 prefs.clear();
这将清除所有关键值任何帮助非常感谢。
没有办法避免这种情况,你必须一一清除这些值。
您必须迭代共享首选项键并避免您不想清除的键。
SharedPreferences preferences = await SharedPreferences.getInstance();
for(String key in preferences.getKeys()) {
if(key != "email" && key!= "password") {
preferences.remove(key);
}
}
另一种简单的方法如下:
String _email = prefs.email;
String _password = prefs.password;
prefs.clear();
prefs.email = _email;
prefs.password = _password;
根据 SharedPreferences 中的信息量,这可能是比迭代每个键更有效的函数
附注不建议在 SharedPreferences 中存储密码。
创建一个列表来保存您想要保留的密钥
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);
}