LoginSignup
3
1

More than 3 years have passed since last update.

Flutter で SharedPreference をジェネリクスで扱う

Posted at

インストール

pubspec.yamlに以下を追加します
バージョンはアップデートに合わせて適宜変更してください
pub.dev shared_preferences

dependencies:
  shared_preferences: ^0.5.7+3

SharedPreferenceをジェネリクスで扱う

SharedPreferenceのラッパーを作ります

import 'package:shared_preferences/shared_preferences.dart';

// 永続化したい値とマッピングするキーを設定しておく
enum HogeKey {
  HogeID,
  HogeToken
}

class HogeSharedPreferences {

  /// 値を永続化する
  static Future<void> store<T>(T value, HogeKey key) async {
    SharedPreferences preferences = await SharedPreferences.getInstance();

    if (value is String) {
      preferences.setString(key.toString(), value);
    } else if (value is bool) {
      preferences.setBool(key.toString(), value);
    } else if (value is double) {
      preferences.setDouble(key.toString(), value);
    } else if (value is int) {
      preferences.setInt(key.toString(), value);
    } else if (value is List<String>) {
      preferences.setStringList(key.toString(), value);
    } else {
      Exception('Not compatible type');
    }
  }

  /// 永続化した値を取得する
  static Future<T> restore<T>(HogeKey key) async {
    SharedPreferences preferences = await SharedPreferences.getInstance();

    return preferences.get(key.toString()) as T;
  }

  /// 永続化した値を全て削除する
  static Future<void> removeAll() async {
    SharedPreferences preferences = await SharedPreferences.getInstance();

    preferences.remove(HogeKey.HogeID.toString());
    preferences.remove(HogeKey.HogeToken.toString());
  }

}

以下のように利用できると思います。

// 永続化
HogeSharedPreferences.store<String>('fuga', HogeKey.HogeToken);
// 取得
HogeSharedPreferences.restore<String>(HogeKey.HogeToken);

あとがき

もっといい方法があるよとか、リファクタリングできるんじゃないか?などありましたら編集リクエストくださいませ!

3
1
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
3
1