Flutter 如何使用SharedReferences保存数据类型映射

Flutter 如何使用SharedReferences保存数据类型映射,flutter,sharedpreferences,provider,Flutter,Sharedpreferences,Provider,我想使用SharedReferences保存类型为map的提供程序数据,但找不到保存类型map的方法 有没有办法一次保存地图 //提供者数据 class SettingDataHandler extends ChangeNotifier { Map<String, dynamic> selectedTimes = { "Pomodoro Setting": 15, "Rest Tim

我想使用SharedReferences保存类型为map的提供程序数据,但找不到保存类型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();
      }
    }
class SettingDataHandler扩展了ChangeNotifier{
映射所选时间={
“波莫多罗设置”:15,
“休息时间设置”:5,
“长休息时间设置”:15,
“休息时间设置期限”:5
};
设置时间(字符串类型设置,int changeValue){
选择Times.update(设置类型,(值)=>changeValue);
notifyListeners();
}
}
//这是我使用SharedReferences的代码

  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);
      }
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);
Future\u initPref()异步{
prefs=等待SharedReferences.getInstance();
var timeData=prefs.get('timeData');
if(timeData!=null){
settingDataHandler.selectedTimes[“Pomotoro设置”]=timeData;
}
pomodoroHandler.pomodoroTime=settingDataHandler.selectedTimes[“Pomodoro设置”];
pomodoroHandler.time=pomodoroHandler.pomodoroTime*60;
返回0;
}
Future\u changedTime()异步{
prefs=等待SharedReferences.getInstance();
int currentPomotoroTime=settingDataHandler.selectedTimes[“Pomotoro设置”];
打印(当前POMOTOROTIME);
等待prefs.setInt('timeData',CurrentPomOrotime);
}

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


更多信息:

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


更多信息:

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

必须使用
json.encode()
方法将映射转换为字符串。返回字符串时,必须使用
json.decode()
对其进行解码

首先
导入'dart:convert'

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

  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);
      }
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);
prefs=wait SharedPreferences.getInstance();
映射所选时间={
“波莫多罗设置”:15,
“休息时间设置”:5,
“长休息时间设置”:15,
“休息时间设置期限”:5
};
字符串encodedMap=json.encode(selectedTimes);
打印(编码DMAP);
prefs.setString('timeData',encodedMap);
从共享首选项检索地图的步骤

  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);
      }
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);
String encodedMap=prefs.getString('timeData');
Map decodedMap=json.decode(encodedMap);
打印(解码地图);

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

必须使用
json.encode()
方法将映射转换为字符串。返回字符串时,必须使用
json.decode()
对其进行解码

首先
导入'dart:convert'

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

  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);
      }
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);
prefs=wait SharedPreferences.getInstance();
映射所选时间={
“波莫多罗设置”:15,
“休息时间设置”:5,
“长休息时间设置”:15,
“休息时间设置期限”:5
};
字符串encodedMap=json.encode(selectedTimes);
打印(编码DMAP);
prefs.setString('timeData',encodedMap);
从共享首选项检索地图的步骤

  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);
      }
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);
String encodedMap=prefs.getString('timeData');
Map decodedMap=json.decode(encodedMap);
打印(解码地图);