SharedPreferencesを使用して、タイプがマップであるプロバイダーデータを保存したいのですが、タイプマップを保存する方法が見つかりません。
マップを一度に保存する方法はありますか?
//プロバイダーデータ
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);
}
共有設定内にマップを直接保存するオプションはありません。
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);
この記事はインターネットから収集されたものであり、転載の際にはソースを示してください。
侵害の場合は、連絡してください[email protected]
コメントを追加