删除 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 中的数据保存并显示为列表?

如何使用 SharedPreferences 从 Flutter 中的列表中保存多个布尔值

SharedPreferences会在使用前不断删除

sharedPreference文件存在哪里,怎么删除?

在 SharedPreferences 中存储数组列表对象

安卓SharedPreferences的使用