Flutter中如何用SharedPreference的getStringList存储去重数组
嘿,我来帮你搞定这个SharedPreferences存储数组的问题~
你现在的代码每次调用_writedata()时,都是直接用[docId]这个新的单元素列表覆盖了原来存储的内容,而且完全没做重复值的校验,所以才会出现每次加载都只有单个ID的情况。下面是修改后的解决方案:
修正后的写入逻辑(带去重)
_writedata(String docId) async{ final prefs = await SharedPreferences.getInstance(); final key = 'my_key'; // 先取出已存储的列表,没有的话就初始化空列表 List<String> savedIds = prefs.getStringList(key) ?? []; // 检查当前docId是否已经存在,不存在才添加 if (!savedIds.contains(docId)) { savedIds.add(docId); // 更新存储的列表 await prefs.setStringList(key, savedIds); } }
读取逻辑(可以保留原有写法)
_loadData() async{ final prefs = await SharedPreferences.getInstance(); final key = 'my_key'; final value = prefs.getStringList(key) ?? []; print('load data: $value'); }
关键改动说明
- 不再覆盖原有数据:每次写入前先读取已有的ID列表,在这个基础上添加新的ID,而不是直接用新列表覆盖旧数据。
- 自动去重:通过
contains()方法判断当前ID是否已经在列表里,只有不存在时才执行添加操作,完美避免重复值。
这样修改后,你每次点击屏幕添加docId时,都会保留之前所有的有效ID,而且不会存入重复项啦~
内容的提问来源于stack exchange,提问作者Elam
相关产品推荐
相关产品推荐

