SharedPreferencesに保存できる型は限定的なので、enumの値を保存するには型を変換して保存する必要があります。
このページではint型を使う方法とString型を使う方法を紹介します。
目次
int型を使う方法:enumのindexを保存する
import 'package:shared_preferences/shared_preferences.dart';
// Enumの定義
enum MyEnum { value1, value2, value3 }
// SharedPreferencesに保存する関数
Future<void> saveEnumIndexToSharedPreferences(MyEnum value) async {
final prefs = await SharedPreferences.getInstance();
prefs.setInt('myEnumIndex', value.index);
}
// SharedPreferencesから読み込む関数
Future<MyEnum> loadEnumFromSharedPreferences() async {
final prefs = await SharedPreferences.getInstance();
final index = prefs.getInt('myEnumIndex');
return index != null ? MyEnum.values[index] : MyEnum.value1;
}
// 使用例
void main() async {
await saveEnumIndexToSharedPreferences(MyEnum.value2);
MyEnum loadedEnum = await loadEnumFromSharedPreferences();
print(loadedEnum); // Output: MyEnum.value2
}
この方法では、enum
の各値のindexを保存し、index
を使ってenum
の値を復元します。
index
がnullの場合は初期値として、MyEnum.value1
を返しています。
注意点
この方法を使う場合、途中でenumの各値の順番を変更することはできません。
各値の順番を入れ替えてしまうと、indexも変わってしまうので、過去にSharedPreferencesに保存したデータと一致しなくなります。
String型を使う方法:enumの値をStringに変換して保存する
import 'package:shared_preferences/shared_preferences.dart';
// Enumの定義
enum MyEnum { value1, value2, value3 }
// SharedPreferencesに保存する関数
Future<void> saveEnumToSharedPreferences(MyEnum value) async {
final prefs = await SharedPreferences.getInstance();
prefs.setString('myEnum',value.toString());
}
// SharedPreferencesから読み込む関数
Future<MyEnum> loadEnumFromSharedPreferences() async {
final prefs = await SharedPreferences.getInstance();
final stringValue = prefs.getString('myEnum');
return MyEnum.values.firstWhere(
(e) => e.toString() == stringValue,
orElse: () => MyEnum.value1
);
}
// 使用例
void main() async {
await saveEnumToSharedPreferences(MyEnum.value1);
MyEnum loadedEnum = await loadEnumFromSharedPreferences();
print(loadedEnum); // Output: MyEnum.value1
}
この方法では、enum
の各値をString
に変換して保存しています。
取り出す時には、SharedPreferencesに保存された文字列と、enumの値を文字列化したものを比較して保存された値がどれなのかを判定しています。
Comment