如恥之,莫如爲仁。仁者如射,射者正己而後發;發而不中,不怨勝己者,反求諸己而已矣。
前言
從這篇博文開始,博主將爲大家介紹Flutter的持久化方式。相信,對於有過Android開發經驗的人來說,應該或多或少都接觸過。比如,在Android裏面的SharedPreferences,數據庫Sqlite,文件讀寫,以及在服務器上的存儲HTML5的localStorage,PWA。
合理地運用持久化,可以讓App支持離線化操作,給用戶帶來極大地操作體驗的提升。這篇,我們將講解在Flutter中的SharedPreferences。
shared_preferences本地存儲
在Flutter開發中,官方推薦我們使用shared_preferences進行數據存儲,它是Flutter社區開發的一個本地數據存取插件,具有一下特性:
(1)它是一個異步的,簡單的,持久化的,key-value形式的存儲系統
(2)在Android端,它是基於SharedPreferences開發的
(3)在IOS端,他是基於NSUserDefaults開發的
因爲它是一個插件,所以在我們開發Flutter項目的時候,需要先引入這個插件,才能使用它,所以在pubspec.yaml裏添加以下依賴就可以了,代碼如下:
dependencies:
shared_preferences: ^0.5.1+1
基本用法
引入shared_preferences後,我們就可以使用起來了,首先,博主介紹一下常用的方法,比如保存的方式,代碼如下:
SharedPreferences sharedPreferences=await SharedPreferences.getInstance();
sharedPreferences.setString(key,value);
同樣,我們取出來數據,代碼如下:
SharedPreferences sharedPreferences=await SharedPreferences.getInstance();
sharedPreferences。getString(key);
除了寫入和讀取外,我們還可能用到刪除數據,代碼如下:
SharedPreferences sharedPreferences=await SharedPreferences.getInstance();
sharedPreferences.remove(key);
其實使用過Java開發Android的程序員都對上面的代碼瞭如指掌,基本上一摸一樣,到這裏,shared_preferences本地存儲的基本用法就講解完了。
實現記錄自增數據的程序
接着,我們通過一個項目實戰來應用shared_preferences本地存儲,我們都知道,我們使用Android Studio創建一個Flutter程序的時候,默認就有一個自增程序的代碼,這裏我們稍微做一下改變,讓這個系統自增的程序,每次啓動的時候,從shared_preferences本地存儲獲取數據,代碼如下:
class _MyHomePageState extends State<MyHomePage> {
int _counter = 0;
@override
void initState() {
super.initState();
_getSharedDate();//獲取本地存儲的數據
}
//自增的方法
void _incrementCounter() async{
SharedPreferences sharedPreferences=await SharedPreferences.getInstance();
int count=(sharedPreferences.get("counter") ?? 0)+1;//獲取本地存儲的數據自增
setState(() {
_counter=count;//顯示到界面上
});
await sharedPreferences.setInt("counter", count);//把自增後的數據在存儲到本地
}
//取出存儲的數據
_getSharedDate() async{
SharedPreferences sharedPreferences=await SharedPreferences.getInstance();
setState(() {
_counter=sharedPreferences.get('counter') ?? 0;//從本地存儲的數據獲取,如果沒有設置爲0,如果有設置爲存儲的數據
});
}
@override
Widget build(BuildContext context) {
return Scaffold(
appBar: AppBar(
title: Text(widget.title),
),
body: Center(
child: Column(
mainAxisAlignment: MainAxisAlignment.center,
children: <Widget>[
Text(
'You have pushed the button this many times:',
),
Text(
'$_counter',
style: Theme.of(context).textTheme.display1,
),
],
),
),
floatingActionButton: FloatingActionButton(
onPressed: _incrementCounter,
tooltip: 'Increment',
child: Icon(Icons.add),
), // This trailing comma makes auto-formatting nicer for build methods.
);
}
使用到shared_preferences本地存儲的代碼都有備註,這裏就不在過多贅述了,本段代碼實現的效果如首圖所示,shared_preferences本地存儲就講到這裏,下一篇講解SQLite數據庫。