shared_preferencesとは
shared_preferences
は、Flutterアプリでデータを簡単に永続化するためのパッケージです。
iOSではNSUserDefaults、AndroidではSharedPreferencesなど、プラットフォーム固有の永続ストレージをラップしています。
キーと値のペアを保存および取得することができます。対応するデータ型は、int、double、bool、String、およびListです。
shared_preferences | Flutter package
Flutter plugin for reading and writing simple key-value pairs. Wraps NSUserDefaults on iOS and SharedPreferences on Andr...
使い方
インストール
まず、pubspec.yaml
ファイルにshared_preferences
を依存関係として追加します。
dependencies:
flutter:
sdk: flutter
shared_preferences: ^2.2.3
基本的な使い方
データの保存
以下のコードは、SharedPreferences
インスタンスを取得し、さまざまなデータ型の値を保存する例です。
// SharedPreferencesインスタンスを取得
final SharedPreferences prefs = await SharedPreferences.getInstance();
// int値を保存
await prefs.setInt('counter', 10);
// bool値を保存
await prefs.setBool('repeat', true);
// double値を保存
await prefs.setDouble('decimal', 1.5);
// String値を保存
await prefs.setString('action', 'Start');
// List<String>値を保存
await prefs.setStringList('items', <String>['Earth', 'Moon', 'Sun']);
データの読み込み
以下のコードは、保存されたデータを読み込む例です。データが存在しない場合はnullが返されます。
// int値を読み込む
final int? counter = prefs.getInt('counter');
// bool値を読み込む
final bool? repeat = prefs.getBool('repeat');
// double値を読み込む
final double? decimal = prefs.getDouble('decimal');
// String値を読み込む
final String? action = prefs.getString('action');
// List<String>値を読み込む
final List<String>? items = prefs.getStringList('items');
データの削除
以下のコードは、保存されたデータを削除する例です。
// 'counter'キーのデータを削除
await prefs.remove('counter');
複数インスタンスの使用
shared_preferences
はキャッシュを使用するため、複数のisolateやエンジンインスタンスで使用する場合には注意が必要です。他の方法でシステムのプリファレンスストアを変更した場合、reload()
メソッドを呼び出してキャッシュを更新することが推奨されます。
await prefs.reload();
テスト
テストでは、標準のSharedPreferences
実装をモックの実装に置き換えることができます。
final Map<String, Object> values = <String, Object>{'counter': 1};
SharedPreferences.setMockInitialValues(values);
プラットフォームごとのストレージ場所
プラットフォーム | ロケーション |
---|---|
Android | SharedPreferences |
iOS | NSUserDefaults |
Linux | XDG_DATA_HOMEディレクトリ内 |
macOS | NSUserDefaults |
Web | LocalStorage |
Windows | roaming AppDataディレクトリ内 |