Flutter數據持久化入門以及與Web開發的對比

對於大部分安卓或者IOS開發人員來講,App的數據持久化多是很日常的一個話題。可是對於Web開發人員來講,可能牢牢意味着localStorage和sessionStorage。html

Web開發

localStorage和sessionStorage

localStoragesessionStorage是類似而又不一樣的,兩者的API接口是極其相似甚至相同。簡單地說一下兩者的異同點:vue

  • localStorage生命週期是永久。這意味着在理論上除非用戶顯示在瀏覽器提供的UI上清除localStorage信息或者使用js代碼命令方式清除,不然這些信息將永遠存在。存放數據大小爲通常爲5MB,並且它僅在客戶端(即瀏覽器)中保存,不參與和服務器的通訊。
  • sessionStorage僅在當前會話下有效,關閉頁面或瀏覽器後被清除。存放數據大小爲通常爲5MB,並且它僅在客戶端(即瀏覽器)中保存,不參與和服務器的通訊。原生接口能夠接受,亦可再次封裝來對ObjectArray有更好的支持。
  • 不一樣瀏覽器沒法共享localStoragesessionStorage中的信息。相同瀏覽器的不一樣頁面間能夠共享相同的localStorage(頁面屬於相同域名和端口),可是不一樣頁面或標籤頁間沒法共享sessionStorage的信息。這裏須要注意的是,頁面及標籤頁僅指頂級窗口,若是一個標籤頁包含多個iframe標籤且他們屬於同源頁面,那麼他們之間是能夠共享sessionStorage的。

以上爲我在開發Web時用到的知識儲備,甚至在我以vue爲技術棧開發WebApp時,也使用localStorage做爲了數據持久化的技術依賴。web

IndexedDB

雖然 Web StoragelocalStoragesessionStorage)對於存儲較少許的數據頗有用,但對於存儲更大量的結構化數據來講,這種方法不太有用。IndexedDB提供了一個解決方案。IndexedDB是在瀏覽器中保存結構化數據的一種數據庫,爲了替換WebSQL(標準已廢棄,但被普遍支持)而出現。IndexedDB使用NoSQL的形式來操做數據庫,保存和讀取是JavaScript對象,同時還支持查詢及搜索。
c4f64b136786c7f39293d517e85f330.png
這個Web數據庫在我日常的Web開發中並未大量使用,具體的細節和API能夠查看IndexedDB-MDN文檔sql

Flutter開發

在通常移動應用開發中,數據存儲基本上都是以文件、數據庫等方式的存在。好比相似sqlite的數據庫,固然Flutter沒有提供直接操做數據庫的API,可是有第三方的插件能夠用,好比sqflite。另外,在簡單數據的存儲上,咱們能夠採用shared_preferences這個庫進行存儲。數據庫

shared_preferences

shared_preferences包含NSUserDefaults(在iOS上)和SharedPreferences(在Android上),爲存儲簡單數據提供方案。shared_preferences使用異步方式將數據保存到磁盤。但兩個方法都不能保證在返回後寫入將持久保存到磁盤,而且這個庫儘可能不要用於存儲關鍵數據。瀏覽器

其實shared_preferencesWeb開發中的localStorage在使用方法上時是十分類似的。服務器

用法

  • 安裝依賴與在文件中引入庫

在在pubspec.yaml文件中,加入以下配置:
2ec73c538647b8cd67a5d433f228b26.pngsession

由於我使用的是配置好的Vscord編輯器,當pubspec.yaml文件增長配置時,文件會自動執行flutter packages get指令。若是其餘編輯器未執行,可自行手動執行。異步

在須要執行的文件中引入這個庫:async

import 'package:shared_preferences/shared_preferences.dart';
  • 構建sp類並使用
main() async {
  // 構建sp類
  SharedPreferences sp = await SharedPreferences.getInstance();
  // 存儲
  sp.setString("name", "lee");
  sp.setInt("age", 24);
  // 讀取
  sp.getString("name");// "lee"
  sp.getInt("age");// 24
  sp.get("name");// "lee"
  //清除
  sp.clear()
  sp.remove("name")
}

具體API接口可查看shared_preferences的API文檔

sqflite

研究中,未完待續~

相關文章
相關標籤/搜索