删除 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);