删除 sharedPreferences 列表中的一个元素
delete one element in a list in sharedPreferences
我想在这里删除我的 favoriteList
中的一个元素,但这似乎不起作用。我在网上看过,但找不到与此相关的任何内容。他们都是关于如何清除 sharedPreferences 或删除密钥。
Future<void> removeFav(String articleId) async {
SharedPreferences prefs = await SharedPreferences.getInstance();
favoriteList = prefs.getStringList('favoriteList');
if (favoriteList != null) {
await prefs.remove('${favoriteList!.where((id) => id == articleId)}'); //I'm guessing id here returns an element of this list..??
print('unfavorited');
setState(() {
isFavorite = false;
});
} else {
print('favoriteList was null');
}
}
您应该执行这些步骤以在 SharedPreferences
中保存对象列表:
将您的对象转换为映射 → toMap()
方法
将您的地图编码为字符串 → encode(...)
方法
将字符串保存到shared preferences
用于恢复您的对象:
将共享首选项字符串解码为映射 → decode(...)
方法
使用fromJson()
方法获取对象
所以在这种情况下,我认为您应该从 shared preference
恢复列表并修改列表,然后将新列表保存在 shared preference
。
您需要先从列表中删除项目:
SharedPreferences prefs = await SharedPreferences.getInstance();
// get the list, if not found, return empty list.
var favoriteList = prefs.getStringList('favoriteList')?? [];
// remove by articleId
favoriteList.removeWhere((item) => item == articleId);
然后,将更改的 favoriteList
保存回 sharedPreferences:
prefs.setStringList('favoriteList', favoriteList);
我想在这里删除我的 favoriteList
中的一个元素,但这似乎不起作用。我在网上看过,但找不到与此相关的任何内容。他们都是关于如何清除 sharedPreferences 或删除密钥。
Future<void> removeFav(String articleId) async {
SharedPreferences prefs = await SharedPreferences.getInstance();
favoriteList = prefs.getStringList('favoriteList');
if (favoriteList != null) {
await prefs.remove('${favoriteList!.where((id) => id == articleId)}'); //I'm guessing id here returns an element of this list..??
print('unfavorited');
setState(() {
isFavorite = false;
});
} else {
print('favoriteList was null');
}
}
您应该执行这些步骤以在 SharedPreferences
中保存对象列表:
将您的对象转换为映射 →
toMap()
方法将您的地图编码为字符串 →
encode(...)
方法将字符串保存到
shared preferences
用于恢复您的对象:
将共享首选项字符串解码为映射 →
decode(...)
方法使用
fromJson()
方法获取对象
所以在这种情况下,我认为您应该从 shared preference
恢复列表并修改列表,然后将新列表保存在 shared preference
。
您需要先从列表中删除项目:
SharedPreferences prefs = await SharedPreferences.getInstance();
// get the list, if not found, return empty list.
var favoriteList = prefs.getStringList('favoriteList')?? [];
// remove by articleId
favoriteList.removeWhere((item) => item == articleId);
然后,将更改的 favoriteList
保存回 sharedPreferences:
prefs.setStringList('favoriteList', favoriteList);