首页 > 解决方案 > 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),
                )),
         

标签: fluttersharedpreferences

解决方案


我建议获取您想要保留的那些变量,清除 shared_preferences 并再次写入变量。否则,您将不得不使用preferences.remove('keyName').

在您的代码中,您将事件数据保存为 json 字符串。因此,如果我做对了,要删除一些变量,您需要获取该字符串,解码 json,删除变量,对字符串进行编码并保存。

我建议您使用sqflite而不是 shared_preferences,因为随着应用程序的增长,管理数据变得越来越复杂。共享首选项用于在应用程序启动之间保存非常简单的数据。


推荐阅读