Flutter:一一删除每个项目保存的共享首选项
Flutter: remove each items saved shared preferences one by one
我正在使用 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,因为随着应用的增长,管理数据会变得越来越复杂。共享首选项用于在应用程序启动之间保存非常简单的数据。
我正在使用 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,因为随着应用的增长,管理数据会变得越来越复杂。共享首选项用于在应用程序启动之间保存非常简单的数据。