flutter - Flutter:一一删除每个保存的共享首选项
问题描述
我正在使用 SharedPreferences 并想一一删除已保存的项目,但我想保留其中一些。例如,如果有 4 个项目,那么我只想删除其中的 2 个。我发现了如何使用“prefs.clear()”或“prefs.remove('events')”一次删除所有项目。
如果您给我任何建议,我将不胜感激!谢谢你。
CalendarController _controller;
Map<DateTime, List<dynamic>> _events;
List<dynamic> _selectedEvents;
TextEditingController _eventController;
SharedPreferences prefs;
@override
void initState() {
super.initState();
_controller = CalendarController();
_eventController = TextEditingController();
_events = {};
_selectedEvents = [];
initPrefs();
}
initPrefs() async {
prefs = await SharedPreferences.getInstance();
setState(() {
_events = Map<DateTime, List<dynamic>>.from(
decodeMap(json.decode(prefs.getString("events") ?? "{}")));
});
}
Map<String, dynamic> encodeMap(Map<DateTime, dynamic> map) {
Map<String, dynamic> newMap = {};
map.forEach((key, value) {
newMap[key.toString()] = map[key];
});
return newMap;
}
Map<DateTime, dynamic> decodeMap(Map<String, dynamic> map) {
Map<DateTime, dynamic> newMap = {};
map.forEach((key, value) {
newMap[DateTime.parse(key)] = map[key];
});
return newMap;
}
..._selectedEvents.map((event) => ListTile(
onLongPress: () {
***// I want to do some action here!!!***
}
title: Text(event),
)),
解决方案
我建议获取您想要保留的那些变量,清除 shared_preferences 并再次写入变量。否则,您将不得不使用preferences.remove('keyName')
.
在您的代码中,您将事件数据保存为 json 字符串。因此,如果我做对了,要删除一些变量,您需要获取该字符串,解码 json,删除变量,对字符串进行编码并保存。
我建议您使用sqflite而不是 shared_preferences,因为随着应用程序的增长,管理数据变得越来越复杂。共享首选项用于在应用程序启动之间保存非常简单的数据。
推荐阅读
- javascript - Babel 没有在 *.mjs 文件中转换 `class`
- python - 如何将索引添加到 Python 中的列表列表
- scala - akka 流不消耗,只记录 WakeupTimeout
- vue.js - axios 拦截器与 vuejs 自定义组件集成,用于以通用方式显示错误消息
- web-services - Amadeus Cancel PNR XML 返回空响应
- ios - 取消按钮无法在 GMSAutocompleteViewController 中显示
- python - Python:按时间间隔分组
- symfony - ButtonType Symfony 的 isClicked()
- java - RecyclerView 带有过滤器列表的可点击对象
- apache - Httpd.conf 重定向到外部 url apache tomcat