本エントリではshared_preferencesの使い方を説明する。
shared_preferencesとは
shared_preferencesとはデータをローカルに保存するためのパッケージ。
以下の特徴がある。
またshared_preferencesは以下の様なケースでよく使用される。
- ユーザーが検索したキーワードのキャッシュ
- 表示しているタブのインデックス保存
共通点は「サイズは小さいが保存しておきたいデータ」であること。
使用する際の注意事項として、アンインストールするとデータは消えてしまうので、ユーザー登録情報などの重要度の高いデータは保存しない方が良い。
shared_preferencesの詳細は公式ページを参照のこと。
shared_preferencesの使い方
準備
インストール
shared_preferencesはサードパーティのパッケージであるので、プロジェクトにあるpubspec.yaml
に以下の記述を追記する。
dependencies: shared_preferences: ^2.0.15
バージョンは更新されている可能性があるため、以下のインストールページをチェックしておくこと。
インスタンスの作成
データを操作する際にはまずSharedPreferences.getInstance()
メソッドを用いてインスタンスを作成する必要がある。
注意点は非同期処理なのでawait
キーワードが必要になる。
final prefs = await SharedPreferences.getInstance();
本エントリではprefs
インスタンスを用いて各データ型ごとに保存・読み取りの説明をする。
データ保存・読み取り
キーについて
shared_preferencesはキーバリュー形式でデータを管理している。 そのため開発者は各データごとにユニークなキーを指定する必要がある。
実際のプロジェクトでは、以降の説明コードでキー名称
と記載されている部分にユニークなキーが入ると想定している。
int型(整数)のデータ
保存方法
setInt()
で値を保存することができる。
prefs.setInt(キー名称, 値);
第二引数に保存したいint
型の値を指定する。
データ型に合わない値は保存することができずエラーになる。
読み取り方法
getInt()
で保存されている値を取得することができる。
prefs.getInt(キー名称);
キー名称
にユニークな文字列を引数に指定する。
もし該当するキー名称
が存在しない場合、null
が返される。
double型(実数、小数)のデータ
保存方法
setDouble()
で値を保存することができる。
prefs.setDouble(キー名称, 値);
第二引数に保存したいdouble
型の値を指定する。
データ型に合わない値は保存することができずエラーになる。
読み取り方法
getDouble()
で保存されている値を取得することができる。
prefs.getDouble(キー名称);
キー名称
にユニークな文字列を引数に指定する。
もし該当するキー名称
が存在しない場合、null
が返される。
String型(文字列)のデータ
保存方法
setString()
で値を保存することができる。
prefs.setString(キー名称, 値);
第二引数に保存したいstring
型の値を指定する。
データ型に合わない値は保存することができずエラーになる。
読み取り方法
getString()
で保存されている値を取得することができる。
prefs.getString(キー名称);
キー名称
にユニークな文字列を引数に指定する。
もし該当するキー名称
が存在しない場合、null
が返される。
List(文字列のリスト)のデータ
保存方法
setStringList()
で値を保存することができる。
prefs.setStringList(キー名称, 値);
第二引数に保存したいList<string>
型の値を指定する。
データ型に合わない値は保存することができずエラーになる。
読み取り方法
getStringList()
で保存されている値を取得することができる。
prefs.getStringList(キー名称);
キー名称
にユニークな文字列を引数に指定する。
もし該当するキー名称
が存在しない場合、null
が返される。
bool型(ブール)のデータ
保存方法
setBool()
で値を保存することができる。
prefs.setBool(キー名称, 値);
第二引数に保存したいbool
型の値を指定する。
データ型に合わない値は保存することができずエラーになる。
読み取り方法
getBool()
で保存されている値を取得することができる。
prefs.getBool(キー名称);
キー名称
にユニークな文字列を引数に指定する。
もし該当するキー名称
が存在しない場合、null
が返される。
データの削除方法
データを削除する場合remove()
メソッドを用いる。
非同期処理なのでawait
が必要。削除が成功するとtrue
が返される。
await prefs.remove(キー名称);
shared_preferencesを用いたサンプルアプリ
カウンターアプリ(int型データの保存・読み取り例)
動作画像
コード
解説
int
型データ_counter
の管理にshared_preferencesを用いたサンプル。
キー名称は「counter」としている。
initState
にて保存されている状態を読み取るため_initSharedPreferencesData()
というメソッドを用意している。
メソッド内でprefs.containsKey(_counterKeyName)
を用いて既に保存されている値が存在するかを確認。
存在する場合はgetInt()
で値を読み取り、プライベート変数の_counter
に値を渡してsetState()
を実行することで数値を表示している。
_counter
の更新処理には以下の3つのメソッドを用意した。
// _counterを1増やす void _incrementCounter() async { final prefs = await SharedPreferences.getInstance(); setState(() { _counter++; }); prefs.setInt(_counterKeyName, _counter); } // _counterを1減らす void _decrementCounter() async { final prefs = await SharedPreferences.getInstance(); setState(() { _counter--; }); prefs.setInt(_counterKeyName, _counter); } // _counterを0にする void _resetCounter() async { final prefs = await SharedPreferences.getInstance(); setState(() { _counter = 0; }); prefs.setInt(_counterKeyName, _counter); }
まずprefs
インスタンスを作成し、その後_counter
を更新してその値を"counter"
キーのバリューに保存している。