我试图在这里删除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 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);
您应该执行以下步骤将对象列表保存在SharedPreferences
:中
-
将对象转换为贴图→
toMap()
方法 -
将地图编码为字符串→
encode(...)
方法 -
将字符串保存到
shared preferences
用于恢复您的对象:
-
将共享首选项字符串解码为映射→
decode(...)
方法 -
使用
fromJson()
方法获取对象
因此,在这种情况下,我认为您应该从shared preference
恢复列表并修改列表,然后将新列表保存在shared preference
中。