概要
どうも、@daiki1003です!Flutterでアプリを作る際、ある程度の規模になってくると
必ず必要になってくるであろうshared_preferences
パッケージ。
shared_preferences | Flutter package
Flutter plugin for reading and writing simple key-value pairs. Wraps NSUserDefaults on iOS and SharedPreferences on Android.
今回は、そんなshared_preferences
の最高の使い方を思いついてしまったので
公開してみたいと思います。
もっとこうした方が良いとかあれば、ぜひTwitterなどで教えてください。
何が改善されているのか?
shared_preferences
に限らず、KVSで保存しようとすると
どうしてもKeyがStringになってしまいますよね。
でも、Stringの違いってコンパイラが検知してくれるものではないので
typoってしまっても誰も教えてくれません。
なので、僕は基本どの言語でも必ずenumとセットで使う様にしています。
Flutterでもそうしようと思っている矢先に思い付いたのが今回の方法です。
Flutterコードの公開
enum PreferenceKey { userId, authenticationToken, ... } extension PreferenceKeyEx on PreferenceKey { String get keyString { switch (this) { case PreferenceKey.userId: return 'user_id'; case PreferenceKey.authenticationToken: return 'authentication_token'; } assert(false); return ''; } Future<bool> setInt(int value) { final pref = await SharedPreferences.getInstance(); return pref.setInt(keyString, value); } Future<bool> getInt({int defaultValue}) { final pref = await SharedPreferences.getInstance(); if (pref.containsKey(keyString)) { return pref.getInt(keyString); } else { return defaultValue; } } // [set|get]String, [set|get]Doubleなど全てを上述の様にラップする }
使う側
PreferenceKey.userId.getInt(); // null PreferenceKey.userId.getInt(defaultValue: 1); // 1 PreferenceKey.userId.setInt(15); PreferenceKey.userId.getInt(); // 15 PreferenceKey.userId.getInt(defaultValue: 1); // 15
いかがでしょうか?
・typoの心配がない、
・基本的には存在しないキーへのアクセスも発生しない
・importがpreference_key.dart
のみで良く、shared_preferences.dart
のimportは必要ない
→ライブラリの変更も容易
ツッコミ等あればお待ちしております!
誰かのお役に立てば。Twitterフォローお願いします
「次回以降も記事を読んでみたい!」「この辺分からなかったから質問したい!」
そんな時は、是非Twitter (@daiki1003)やInstagram (@ashdik_flutter)のフォローお願いします♪
Twitterコミュニティ参加お願いします
Twitterコミュニティ「Flutter lovers」を開設しました!参加お待ちしております😁
☕️ Buy me a coffee
また、記事がとても役に立ったと思う人はコーヒーを奢っていただけると非常に嬉しいです!
コメント