【Flutter】shared_preferencesで値を保存する

Flutter

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);

プラットフォームごとのストレージ場所

プラットフォームロケーション
AndroidSharedPreferences
iOSNSUserDefaults
LinuxXDG_DATA_HOMEディレクトリ内
macOSNSUserDefaults
WebLocalStorage
Windowsroaming AppDataディレクトリ内

Buy me a coffee!

Flutterアプリ開発
シェアする
sogaをフォローする
タイトルとURLをコピーしました