shared_preferences
?是一個Flutter插件,它提供了一種簡單的方式來在應用程序中存儲和獲取持久化的鍵值對數據。它可以用于存儲應用程序的配置信息、用戶偏好設置、登錄狀態等。
使用?shared_preferences
?插件,你可以在應用程序中輕松地保存和讀取數據,而無需處理底層的持久化細節。它基于平臺的本地存儲機制,例如Android中的SharedPreferences和iOS中的NSUserDefaults。
shared_preferences基本用法
以下是使用?shared_preferences
?插件的基本操作:
1.添加依賴
在你的Flutter項目的?pubspec.yaml
?文件中添加?shared_preferences
?依賴。
dependencies:shared_preferences: ^2.2.2
2.導入插件
在需要使用?shared_preferences
?的文件中導入插件。
import 'package:shared_preferences/shared_preferences.dart';
3.存儲數據
使用?SharedPreferences.getInstance()
?方法獲取?SharedPreferences
?實例,并使用?setXxx()
?方法存儲數據。
SharedPreferences prefs = await SharedPreferences.getInstance();
prefs.setString('username', 'John');
prefs.setInt('age', 25);
4.讀取數據
使用?SharedPreferences.getInstance()
?方法獲取?SharedPreferences
?實例,并使用?getXxx()
?方法讀取數據。
SharedPreferences prefs = await SharedPreferences.getInstance();
String username = prefs.getString('username');
int age = prefs.getInt('age');
5.刪除數據
使用?SharedPreferences.getInstance()
?方法獲取?SharedPreferences
?實例,并使用?remove()
?方法刪除指定鍵的數據。
SharedPreferences prefs = await SharedPreferences.getInstance();
prefs.remove('username');
通過使用?shared_preferences
?插件,你可以方便地在Flutter應用程序中存儲和獲取持久化的數據。請注意,這些數據是應用程序私有的,只能在當前設備上訪問。
可視化管理shared_preferences中的key和value類型
看了上面shared_preferences的基本用法,我們會發現,直接使用時會導致定義的key特別分散。開發者無法一目了然的查看,現在shared_preferences中定義了哪些key,對應的value又是什么類型。
1.使用
await SharedPreferencesManager.instance.set(SharedPreferencesKey.didGuide, true);bool? res = await SharedPreferencesManager.instance.get(SharedPreferencesKey.didGuide);
2.封裝SharedPreferencesManager
import 'package:shared_preferences/shared_preferences.dart';/// 管理SharedPreferences的鍵和值。
class SharedPreferencesManager {// 單例對象static final SharedPreferencesManager _instance =SharedPreferencesManager._internal();// SharedPreferences的實例late SharedPreferences _prefs;// 私有構造函數,用于創建類的單例實例SharedPreferencesManager._internal() {_init();}// 異步初始化,確保在使用SharedPreferences之前已完成初始化void _init() async {_prefs = await SharedPreferences.getInstance();}// 私有方法,確保SharedPreferences實例已初始化Future<void> _ensureInitialized() async {if (_prefs == null) {_init();}}// 提供一個getter來獲取單例對象static SharedPreferencesManager get instance => _instance;// 使用泛型方法來獲取鍵對應的值。// 根據泛型參數T的類型,決定使用哪個SharedPreferences的getter方法。Future<T?> get<T>(SharedPreferencesKey key) async {await _ensureInitialized(); // 確保_prefs已初始化if (T == String) {return _prefs.getString(key.toString()) as T?;} else if (T == bool) {return _prefs.getBool(key.toString()) as T?;} else if (T == int) {return _prefs.getInt(key.toString()) as T?;} else if (T == double) {return _prefs.getDouble(key.toString()) as T?;} else if (T == List) {// 特別注意:我們假設List類型指的是List<String>return _prefs.getStringList(key.toString()) as T?;} else {// 如果類型不支持,則拋出異常throw Exception('Unsupported type');}}// 使用泛型方法設置值Future<bool> set<T>(SharedPreferencesKey key, T value) async {await _ensureInitialized();String keyString = key.toString();if (value is String) {return _prefs.setString(keyString, value);} else if (value is bool) {return _prefs.setBool(keyString, value);} else if (value is int) {return _prefs.setInt(keyString, value);} else if (value is double) {return _prefs.setDouble(keyString, value);} else if (value is List<String>) {return _prefs.setStringList(keyString, value);} else {throw Exception('Unsupported type');}}
}/// 定義一個枚舉,包含所有keys和它們對應的類型
enum SharedPreferencesKey {didGuide(bool), // 引導狀態的鍵,與布爾類型關聯username(String),themeMode(String);// 存儲枚舉值關聯的類型final Type type;// 枚舉構造函數const SharedPreferencesKey(this.type);
}