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,因为随着应用的增长,管理数据会变得越来越复杂。共享首选项用于在应用程序启动之间保存非常简单的数据。