shared_preference: 導入 使い方 - Ki-Kobayashi/flutter_wiki GitHub Wiki

🟩 公式より、パッケージインストール

https://pub.dev/packages/shared_preferences

.

🟩【Riverpod使用の場合】の設定

  1. Providerの設定
  2. main.dartでProviderScopeのoverrideの設定
  3. 呼び出して使用

.

🟡1:Providerの設定

SharedPreferences の インスタンス取得は非同期 となっている。

非同期取得ということは、毎度 FutureProvider を使用することになる。
このままでは、SharedPreferences で保存した値を読み込む  get メソッドは非同期ではない のに、 Future で使わないといけなくなる

毎回非同期でインスタンスを取得せずに使用するためにも、 Provider を使ってインスタンスをキャッシュ しておく。
インスタンスのキャッシュを取得するだけのため、一番基本的な「Provider」を使用する。

.

💎app_provider.dart(任意のファイル名でOK)

そのままアクセスすると例外を投げる(スローする)Providerを作成する

@Riverpod(keepAlive: true)
SharedPreferences sharedPreferences(SharedPreferencesRef ref) {
  throw UnimplementedError();
}

.

🟡 2:【main.dart】実際に初回インスタンス生成する

Future<void> main() async {
  // 👇`runApp` 関数が終わる前に何か処理を実行する場合は 下記追記
  WidgetsFlutterBinding.ensureInitialized();
  runApp(
    ProviderScope(
      overrides: [
        sharedPreferencesProvider.overrideWithValue(
          // 👇以下でインスタンス化し、Providerの値を上書き
          await SharedPreferences.getInstance(),
        ),
      ],
      child: App(),
    ),
  );
}

.

🟡 3:呼び出して使用

SharedPreferences は、基本的なデータ型(文字列:String、整数:int、ブール値:bool、浮動小数点数:double、文字列のリスト:List)のみしか、保存できない。

enum型は、保存や読み込みを行う際に、文字列や整数などの基本的なデータ型に 変換 する必要がある

final prefs = ref.read(sharedPreferencesProvider);

// リストを登録
prefs.setStringList(ConstSharedPrefKey.xxxKey, newStringList);
// リストの読み出し
prefs.getStringList(ConstSharedPrefKey.xxxKey) ?? <String>[];

// テーマモードを登録する例
//    🚨ThemeModeは System, Dark, Light といった値を持つenum型
static Future<void> saveThemeMode(ThemeMode mode) async {
    final prefs = ref.read(sharedPreferencesProvider);
    prefs.setString(themeModeKey, mode.toString());
}

// テーマモードを取得する例
static Future<ThemeMode> getThemeMode() async {
    final prefs = ref.read(sharedPreferencesProvider);
    final themeModeString =
        prefs.getString(themeModeKey) ?? ThemeMode.system.toString();
    return ThemeMode.values.firstWhere(
      (element) => element.toString() == themeModeString,
      orElse: () => ThemeMode.system,
    );
}

.

🟩

🟡

.

🟩

🟡

.

🟩

🟡

.

🟩

🟡

.

🟩

🟡

.

🟩

🟡

.

🟩

🟡

.

⚠️ **GitHub.com Fallback** ⚠️