[Flutter]shared_preferences基本用法以及可視化管理存儲的key和value類型

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

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/news/717303.shtml
繁體地址,請注明出處:http://hk.pswp.cn/news/717303.shtml
英文地址,請注明出處:http://en.pswp.cn/news/717303.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

Java中線程相關的知識

創建子線程的三種方式: 1.自定義線程任務類繼承線程類&#xff0c;以便繼承其功能,重寫其run方法(里面寫自己需要實現的功能)&#xff0c;在main方法調用時創建其任務類實例化對象&#xff0c;然后調用對象的start方法(繼承自父類)&#xff0c;即成功創建線程 優點:創建方式簡…

Pandas DataFrame 基本操作實例100個

Pandas 是一個基于NumPy的數據分析模塊&#xff0c;最初由AQR Capital Management于2008年4月開發&#xff0c;并于2009年底開源。Pandas的名稱來源于“Panel Data”&#xff08;面板數據&#xff09;和“Python數據分析”&#xff08;data analysis&#xff09;。這個庫現在由…

來不及了!大學必須完成的四件事!

老師們常說&#xff0c;上大學就輕松了 其實不然 大學不是人生的終點&#xff0c;而是新的起跑線 不是休息站&#xff0c;而是進入社會的最后沖刺跑道 大學生活苦樂參半&#xff0c;成人世界即將來臨 出了校門&#xff0c;你會發現社會復雜多變&#xff0c;需要不斷學習 稍…

excel中如何使用VLOOKUP和EXACT函數實現區分大小寫匹配數據

在 Excel 中&#xff0c;VLOOKUP 函數默認情況下是不區分大小寫的&#xff1a; 比如下面的案例&#xff0c;直接使用VLOOKUP函數搜索&#xff0c;只會搜索匹配到不區分大小寫的第一個 如果我們想要實現區分大小寫的精確匹配&#xff0c;可以使用 EXACT 函數結合 VLOOKUP 函數 …

【簡說八股】Redisson的守護線程是怎么實現的

Redisson Redisson 是一個 Java 語言實現的 Redis SDK 客戶端&#xff0c;在使用分布式鎖時&#xff0c;它就采用了「自動續期」的方案來避免鎖過期&#xff0c;這個守護線程我們一般也把它叫做「看門狗」線程。 Redission是一個在Java環境中使用的開源的分布式緩存和分布式鎖實…

PyTorch-卷積神經網絡

卷積神經網絡 基本結構 首先解釋一下什么是卷積&#xff0c;這個卷積當然不是數學上的卷積&#xff0c;這里的卷積其實表示的是一個三維的權重&#xff0c;這么解釋起來可能不太理解&#xff0c;我們先看看卷積網絡的基本結構。 通過上面的圖我們清楚地了解到卷積網絡和一般網…

【Javascript】設計模式之發布訂閱模式

文章目錄 1、現實中的發布&#xff0d;訂閱模式2、DOM 事件3、簡單的發布-訂閱模式4、通用的發布-訂閱模式5、先發布再訂閱6、小結 發布—訂閱模式又叫觀察者模式&#xff0c;它定義對象間的一種一對多的依賴關系&#xff0c;當一個對象的狀態發生改變時&#xff0c;所有依賴于…

Mysql深入學習 基礎篇 Ss.02 詳解四類SQL語句

我親愛的對手&#xff0c;亦敵亦友&#xff0c;但我同樣希望你能成功&#xff0c;與我一起&#xff0c;站在人生的山頂上 ——24.3.1 一、DDL 數據定義語言 1.DDL —— 數據庫操作 查詢 查詢所有數據庫 show databases; 查詢當前數據庫 select database(); 創建 create databa…

【簡說八股】Nginx、GateWay、Ribbon有什么區別?

前言 在現代的微服務架構中&#xff0c;Nginx、Gateway 和 Ribbon 都是處理網絡請求和服務的組件&#xff0c;但它們各自扮演的角色和提供的功能有所不同。下面我將詳細解釋它們之間的區別&#xff1a; Nginx Nginx 是一個高性能的 HTTP 和反向代理服務器&#xff0c;它也可…

Golang Vs Java:為您的下一個項目選擇正確的工具

Java 首次出現在 1995 年&#xff0c;由 James Gosling 和 Sun Microsystems 的其他人開發的一種新編程語言。從那時起&#xff0c;Java 已成為世界上最受歡迎和廣泛使用的編程語言之一。Java 的主要特點包括其面向對象的設計、健壯性、平臺獨立性、自動內存管理以及廣泛的內置…

MSMFN

CDFI是彩色多普勒血流成像 輔助信息 作者未提供數據

Codeforces Round 930 (Div. 2)

substr時間復雜度O&#xff08;N&#xff09;&#xff0c;不能一遍遍找&#xff0c;會超時 #include<iostream> #include<algorithm> #include<vector> #include<map> using namespace std; const int N5e510; map<string,int>mp; vector<…

[C++]AVL樹怎么轉

AVL樹是啥 一提到AVL樹&#xff0c;腦子里不是旋了&#xff0c;就是懸了。 AVL樹之所以難&#xff0c;并不是因為結構難以理解&#xff0c;而是因為他的旋轉。 AVL樹定義 平衡因子&#xff1a;對于一顆二叉樹&#xff0c;某節點的左右子樹高度之差&#xff0c;就是該節點的…

5、云原生安全之falco的規則解讀(部分)(上)

文章目錄 1、自定義規則測試1.1、自定義檢測定時任務的規則2、自帶規則詳解部分2.1、意外的出站連接源(類似的還有入站連接)2.2、檢測目錄穿越攻擊2.3、rpm數據庫被修改2.4、數據庫派生新的進程2.5、特權容器啟動2.6、啟動容器掛載到敏感路徑2.7、匹配所有在pod內啟動、并連接…

音視頻數字化(數字與模擬-照相機)

目錄 1、模擬/數字 2、第一臺照相機 3、照相機原理 4、取景方式 5、底片 6、數碼相機 7、數碼相機指標 8、數碼相機分類 (1)單反相機 (2)單電相機 (3)無反相機

2024.03.02藍橋云課筆記

1.scanf與printf取消分隔符的限制方法 示例代碼&#xff1a; int main() { char s[10];scanf("%d[^\n]",s);printf("%s",s);return 0; } 運行&#xff1a; 輸入&#xff1a;Hello World 輸出&#xff1a;Hello World 注&#xff1a;其中[]中是一個正則…

(UE4升級UE5)Selected Level Actor節點升級到UE5

本問所用工具為&#xff1a;AssetDeveTool虛幻開發常用工具https://gf.bilibili.com/item/detail/1104960041 在UE4中 編輯器藍圖有個節點為 Get Selected Level Actors 但在UE5中&#xff0c;藍圖直接升級后&#xff0c;節點失效&#xff0c;如圖&#xff1a; 因為在UE5中&am…

Vue3中Vuex狀態管理庫學習筆記

1.什么是狀態管理 在開發中&#xff0c;我們會的應用程序需要處理各種各樣的數據&#xff0c;這些數據需要保存在我們應用程序的某個位置&#xff0c;對于這些數據的管理我們就稱之為狀態管理。 在之前我們如何管理自己的狀態呢&#xff1f; 在Vue開發中&#xff0c;我們使用…

大廠面試經驗:如何對加密后的數據進行模糊查詢操作

加密后的數據對模糊查詢不是很友好&#xff0c;本篇就針對加密數據模糊查詢這個問題來展開講一講實現的思路。 為了數據安全我們在開發過程中經常會對重要的數據進行加密存儲&#xff0c;常見的有&#xff1a;密碼、手機號、電話號碼、詳細地址、銀行卡號、信用卡驗證碼等信息…

YoloV5改進策略:主干網絡改進|MogaNet——高效的多階門控聚合網絡

文章目錄 摘要論文:《MogaNet——高效的多階門控聚合網絡》1、簡介2、相關工作2.1、視覺Transformers2.2、ViT時代的卷積網絡3、從多階博弈論交互的角度看表示瓶頸4、方法論4.1、MogaNet概述4.2、多階門控聚合4.3、通過通道聚合進行多階特征重新分配4.4、實現細節5、實驗5.1、…