删除 sharedPreferences 列表中的一个元素
Posted
技术标签:
【中文标题】删除 sharedPreferences 列表中的一个元素【英文标题】:delete one element in a list in sharedPreferences 【发布时间】:2021-12-19 07:05:31 【问题描述】:我试图在这里删除我的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');
【问题讨论】:
【参考方案1】:您需要先从列表中删除该项目:
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);
【讨论】:
【参考方案2】:您应该执行以下步骤以将对象列表保存在SharedPreferences
:
将您的对象转换为地图 → toMap()
方法
将您的地图编码为字符串 → encode(...)
方法
将字符串保存到shared preferences
用于恢复您的对象:
将共享首选项字符串解码为映射 → decode(...)
方法
使用fromJson()
方法获取您的对象
所以在这种情况下,我认为您应该从shared preference
恢复列表并修改列表,然后将新列表保存在shared preference
。
【讨论】:
以上是关于删除 sharedPreferences 列表中的一个元素的主要内容,如果未能解决你的问题,请参考以下文章
如何将 SharedPreferences 中的数据保存并显示为列表?