shared_preference: 導入 使い方 - Ki-Kobayashi/flutter_wiki GitHub Wiki
https://pub.dev/packages/shared_preferences
.
- Providerの設定
- main.dartでProviderScopeのoverrideの設定
- 呼び出して使用
.
SharedPreferences の インスタンス取得は非同期 となっている。
非同期取得ということは、毎度 FutureProvider を使用することになる。
このままでは、SharedPreferences で保存した値を読み込む get メソッドは非同期ではない のに、 Future で使わないといけなくなる
毎回非同期でインスタンスを取得せずに使用するためにも、 Provider を使ってインスタンスをキャッシュ しておく。
インスタンスのキャッシュを取得するだけのため、一番基本的な「Provider」を使用する。
.
そのままアクセスすると例外を投げる(スローする)Providerを作成する
@Riverpod(keepAlive: true)
SharedPreferences sharedPreferences(SharedPreferencesRef ref) {
throw UnimplementedError();
}
.
Future<void> main() async {
// 👇`runApp` 関数が終わる前に何か処理を実行する場合は 下記追記
WidgetsFlutterBinding.ensureInitialized();
runApp(
ProviderScope(
overrides: [
sharedPreferencesProvider.overrideWithValue(
// 👇以下でインスタンス化し、Providerの値を上書き
await SharedPreferences.getInstance(),
),
],
child: App(),
),
);
}
.
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,
);
}
.
.
.
.
.
.
.
.