【问题标题】:How can I save data type map by using SharedPreferences如何使用 SharedPreferences 保存数据类型映射
【发布时间】:2020-09-19 03:12:38
【问题描述】:

我想使用 SharedPreferences 保存类型为 map 的 Provider 数据,但我找不到保存类型 map 的方法..

有没有办法一次保存地图??

// 提供者数据

    class SettingDataHandler extends ChangeNotifier {
    
    
      Map<String, dynamic> selectedTimes = {
        "Pomodoro Setting": 15,
        "Rest Time Setting": 5,
        "Long Rest Time Setting": 15,
        "Term of Resting Time Setting": 5
      };
    
      setTime(String typeOfSetting, int changeValue) {
        selectedTimes.update(typeOfSetting, (value) => changeValue);
        notifyListeners();
      }
    }

// 这是我使用 SharedPreferences 的代码

  Future<int> _initPref() async {
      prefs = await SharedPreferences.getInstance();
      var timeData = prefs.get('timeData');
      if (timeData != null) {
        settingDataHandler.selectedTimes["Pomodoro Setting"] = timeData;
      }
    
      pomodoroHandler.pomodoroTime = settingDataHandler.selectedTimes["Pomodoro Setting"];
      pomodoroHandler.time = pomodoroHandler.pomodoroTime * 60;
    
      return 0;
    }


     Future<void> _changedTime() async {
        prefs = await SharedPreferences.getInstance();
        int currentPomodoroTime = settingDataHandler.selectedTimes["Pomodoro Setting"];
        print(currentPomodoroTime);
        await prefs.setInt('timeData', currentPomodoroTime);
      }

【问题讨论】:

    标签: flutter sharedpreferences provider


    【解决方案1】:

    没有选项可以直接将地图保存在共享首选项中。

    您必须使用json.encode() 方法将地图转换为字符串。当您取回字符串时,您必须使用 json.decode() 对其进行解码。

    首先import 'dart:convert';

    将地图保存到共享首选项中

    prefs = await SharedPreferences.getInstance();
    Map<String, dynamic> selectedTimes = {
            "Pomodoro Setting": 15,
            "Rest Time Setting": 5,
            "Long Rest Time Setting": 15,
            "Term of Resting Time Setting": 5
          };
    String encodedMap = json.encode(selectedTimes);
    print(encodedMap);
    
    prefs.setString('timeData', encodedMap);
      
    

    从共享首选项中检索地图

    String encodedMap = prefs.getString('timeData');
    Map<String,dynamic> decodedMap = json.decode(encodedMap);
    print(decodedMap);
    

    【讨论】:

      【解决方案2】:

      您只能将字符串或字符串列表保存在共享首选项中,而不能直接保存在地图中。但是您可以使用 dart:convert 库和 jsonEncode() 和 jsonDecode() 方法将地图转换为字符串或从字符串转换并以这种方式保存。

      更多信息:https://flutter.dev/docs/development/data-and-backend/json

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2017-01-05
        • 1970-01-01
        • 2015-03-09
        • 2018-02-13
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多