はじめに
Flutterでアプリを作成した際に、ちょっとしたデータを保存したいことがあります。ローカルストレージに大量にデータ保存する場合はSQLiteなどでも良いのですが、アプリの音量の設定のためにわざわざSQLiteを実装するのはさすがに大変です。
そこで今回はアプリの設定等の小さいデータを保存するのに便利なプラグイン「SharedPreferences」を紹介したいと思います。
環境
- Flutter 1.22.5
- shared_preferences 0.5.12+4
実装方法
プラグインの最新バージョンを確認
下記のサイトにアクセスし、バージョンの確認をします。
shared_preferences | Flutter package
Flutter plugin for reading and writing simple key-value pairs. Wraps NSUserDefaults on iOS and SharedPreferences on Andr...
記事作成の時点では0.5.12+4が最新バージョンでした。
プラグインをインストール
pubspec.yamlのdependenciesに「shared_preferences: ^0.5.12+4」を追記します。
dependencies:
flutter:
sdk: flutter
shared_preferences: ^0.5.12+4
# The following adds the Cupertino Icons font to your application.
その後、プロジェクト配下で「flutter pub get」コマンドを実行します。
よくわからない場合はAndroid Studioでpubspec.yamlファイルを開くと右上に「Pub get」ボタンがあるのでそれを押してください。
実行結果
/Users/XXXXXX/bin/flutter --no-color pub get
Running "flutter pub get" in flutter_app... 0.5s
Process finished with exit code 0
これでプラグインのインストール完了です。
サンプルコード
下記がサンプルコードです。下記のようなコードを書くだけで、簡単にデータを保存/読み込みが出来ます。
iOS、AndroidのNativeで開発したことがある方はお気づきかもしれませんが、このSharedPreferencesはUserDefaults(iOS)、SharedPreferences(Android)をラッパーしているだけです。
import 'package:shared_preferences/shared_preferences.dart';
Future _getPreferences() async {
var preferences = await SharedPreferences.getInstance();
// SharedPreferencesから値を取得.
// keyが存在しない場合はnullを返す.
print(preferences.getInt("test_int_key"));
print(preferences.getString("test_string_key"));
print(preferences.getBool("test_bool_key"));
print(preferences.getDouble("test_double_key"));
}
Future _setPreferences() async {
var preferences = await SharedPreferences.getInstance();
// SharedPreferencesに値を設定.
preferences.setInt("test_int_key", 1);
preferences.setString("test_string_key", "message");
preferences.setBool("test_bool_key", true);
preferences.setDouble("test_double_key", 1.0);
}
Future _deletePreferences(String key) async {
var preferences = await SharedPreferences.getInstance();
// SharedPreferencesにkeyが存在するかどうか.
if (preferences.containsKey(key)) {
// SharedPreferencesからkeyに設定している値を削除.
await preferences.remove(key);
}
}
Future _deleteAllPreferences() async {
var preferences = await SharedPreferences.getInstance();
// SharedPreferencesの値を全て削除.
await preferences.clear();
}
さいごに
実際コードを使う際は毎回、「await SharedPreferences.getInstance();」と書くのもめんどくさいですし、keyの文字列の指定ミス等も考えられるのでクラスにまとめて整理することをおすすめします。
コメント