Flutter(二十七)——shared_preferences本地存儲

如恥之,莫如爲仁。仁者如射,射者正己而後發;發而不中,不怨勝己者,反求諸己而已矣。

前言

從這篇博文開始,博主將爲大家介紹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數據庫。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章