MENU

【Flutter】enumの値をSharedPreferencesに保存する方法

記事内に商品プロモーションが含まれる場合があります

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の値を文字列化したものを比較して保存された値がどれなのかを判定しています。

Share

Comment

コメントする

目次