Flutter數(shù)據(jù)存儲(chǔ)之shared_preferences

前言

做過(guò)android開(kāi)發(fā)的人都知道闺金,可以利用SharedPreferences這個(gè)輕量級(jí)的存儲(chǔ)類(lèi)來(lái)保存鍵值對(duì)信息,在Flutter中贸典,我們可以使用shared_preferences庫(kù)來(lái)同時(shí)支持Android和ios平臺(tái)配乓。

參考:
1.《Flutter中的本地存儲(chǔ)》

  1. 《Flutter知識(shí)點(diǎn):數(shù)據(jù)存儲(chǔ)之SharedPreferences》

  2. shared_preferences 0.4.2

使用介紹

  1. pubspec.yaml文件中添加依賴(lài)
shared_preferences: "^0.4.2"

添加的位置如圖所示:


添加依賴(lài)
  1. 安裝依賴(lài)庫(kù)
    執(zhí)行$ flutter packages get命令

  2. 在相應(yīng)文件中導(dǎo)入該庫(kù)

import 'package:shared_preferences/shared_preferences.dart';
  1. 增刪改查
    增:
SharedPreferences prefs = await SharedPreferences.getInstance();
prefs.setString(key, value)
prefs.setBool(key, value)
prefs.setDouble(key, value)
prefs.setInt(key, value)
prefs.setStringList(key, value)

其中key就是你存貯的名稱(chēng),value就是你存儲(chǔ)的值
刪:

SharedPreferences prefs = await SharedPreferences.getInstance();
prefs.remove(key); //刪除指定鍵
prefs.clear();//清空鍵值對(duì)

改:

改和增是一樣的巢株,只需要再執(zhí)行一次setXXX()方法即可覆蓋之前的數(shù)據(jù)槐瑞。

查:


查詢(xún)操作的幾個(gè)API

使用示例

image.png

首先我們創(chuàng)建了一個(gè)TextField用來(lái)獲取用戶輸入,然后我們?cè)傧旅娑x看了連個(gè)按鈕阁苞,每當(dāng)當(dāng)即存儲(chǔ)按鈕都會(huì)觸發(fā)save() 方法困檩,每當(dāng)點(diǎn)擊獲取按鈕都會(huì)觸發(fā)get()方法。
先來(lái)看看save()方法

save() async{
    SharedPreferences prefs = await SharedPreferences.getInstance();
    prefs.setString(mUserName, _userNameController.value.text.toString());
}

在上面save方法中我們可以看到我們給它加上了async和await關(guān)鍵字那槽,因?yàn)镾haredPreferences的存貯也是一個(gè)輕量級(jí)的耗時(shí)操作悼沿,所以我們也是需要在異步中進(jìn)行的。
我們使用SharedPreferences.getInstance()方法來(lái)實(shí)例化SharedPreferences對(duì)象骚灸,使用它的setString方法來(lái)存儲(chǔ)用戶輸入的字符串糟趾。

setString(key, value)

接下來(lái)來(lái)看下get方法

Future<String> get() async {
  var userName;
    SharedPreferences prefs = await SharedPreferences.getInstance();
    userName = await prefs.getString(mUserName);
  return userName;
}

在get方法中我們同樣實(shí)例化了一個(gè)SharedPreferences對(duì)象,并且調(diào)用SharedPreferences的getString方法來(lái)獲取我們存入的對(duì)象甚牲。
getString(key)
key就是我們剛才存入的值义郑,我們通過(guò)這個(gè)值可以在本地查找到我們存入的對(duì)象并返回。
同樣的丈钙,get方法也是耗時(shí)操作非驮,同樣需要異步執(zhí)行,我們使用async和await來(lái)使得get方法異步并返回了一個(gè)泛型為String的Future對(duì)象著恩。

Future<String> userName = get();
                         userName.then((String userName) {
                           Scaffold.of(context).showSnackBar(
                                SnackBar(content: Text("數(shù)據(jù)獲取成功:$userName")));
                         });

我們使用獲得的Future對(duì)象調(diào)用then()方法院尔,當(dāng)get方法執(zhí)行完后就會(huì)自動(dòng)觸發(fā)then()方法里面的操作彈出showSnackBar。
下面給出完整代碼:

import 'dart:async';

import 'package:flutter/material.dart';
import 'package:shared_preferences/shared_preferences.dart';

void main() {
  runApp(new MaterialApp(home: new MyApp()));
}



class MyApp extends StatelessWidget {
  final String mUserName = "userName";
  final _userNameController = new TextEditingController();

  @override
  Widget build(BuildContext context) {
    save() async{
        SharedPreferences prefs = await SharedPreferences.getInstance();
        prefs.setString(mUserName, _userNameController.value.text.toString());
    }

    Future<String> get() async {
      var userName;

        SharedPreferences prefs = await SharedPreferences.getInstance();
         userName = prefs.getString(mUserName);
      return userName;
    }

    return new Builder(builder: (BuildContext context) {
      return new Scaffold(
        appBar:  AppBar(
          title:  Text("SharedPreferences"),
        ),
        body:  Center(
          child: new Builder(builder: (BuildContext context){
            return
                Column(
                  children: <Widget>[
                     TextField(
                      controller: _userNameController,
                      decoration:  InputDecoration(
                          contentPadding: const EdgeInsets.only(top: 10.0),
                          icon:  Icon(Icons.perm_identity),
                          labelText: "請(qǐng)輸入用戶名",
                          helperText: "注冊(cè)時(shí)填寫(xiě)的名字"),
                    ),
                    RaisedButton(
                        color: Colors.blueAccent,
                        child: Text("存儲(chǔ)"),
                        onPressed: () {
                          save();
                          Scaffold.of(context).showSnackBar(
                              new SnackBar(content:  Text("數(shù)據(jù)存儲(chǔ)成功")));
                        }),
                    RaisedButton(
                        color: Colors.greenAccent,
                        child: Text("獲取"),
                        onPressed: () {
                          Future<String> userName = get();
                          userName.then((String userName) {
                            Scaffold.of(context).showSnackBar(
                                 SnackBar(content: Text("數(shù)據(jù)獲取成功:$userName")));
                          });
                        }),
                  ],
                );
          }),
        ),
      );
    });
  }
}

鍵值對(duì)文件存放路徑

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末喉誊,一起剝皮案震驚了整個(gè)濱河市邀摆,隨后出現(xiàn)的幾起案子,更是在濱河造成了極大的恐慌伍茄,老刑警劉巖栋盹,帶你破解...
    沈念sama閱讀 206,311評(píng)論 6 481
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件,死亡現(xiàn)場(chǎng)離奇詭異敷矫,居然都是意外死亡例获,警方通過(guò)查閱死者的電腦和手機(jī),發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 88,339評(píng)論 2 382
  • 文/潘曉璐 我一進(jìn)店門(mén)曹仗,熙熙樓的掌柜王于貴愁眉苦臉地迎上來(lái)榨汤,“玉大人,你說(shuō)我怎么就攤上這事怎茫∈蘸荆” “怎么了妓灌?”我有些...
    開(kāi)封第一講書(shū)人閱讀 152,671評(píng)論 0 342
  • 文/不壞的土叔 我叫張陵,是天一觀的道長(zhǎng)蜜宪。 經(jīng)常有香客問(wèn)我虫埂,道長(zhǎng),這世上最難降的妖魔是什么圃验? 我笑而不...
    開(kāi)封第一講書(shū)人閱讀 55,252評(píng)論 1 279
  • 正文 為了忘掉前任掉伏,我火速辦了婚禮,結(jié)果婚禮上澳窑,老公的妹妹穿的比我還像新娘斧散。我一直安慰自己,他們只是感情好摊聋,可當(dāng)我...
    茶點(diǎn)故事閱讀 64,253評(píng)論 5 371
  • 文/花漫 我一把揭開(kāi)白布颅湘。 她就那樣靜靜地躺著,像睡著了一般栗精。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上瞻鹏,一...
    開(kāi)封第一講書(shū)人閱讀 49,031評(píng)論 1 285
  • 那天悲立,我揣著相機(jī)與錄音,去河邊找鬼新博。 笑死薪夕,一個(gè)胖子當(dāng)著我的面吹牛,可吹牛的內(nèi)容都是我干的赫悄。 我是一名探鬼主播原献,決...
    沈念sama閱讀 38,340評(píng)論 3 399
  • 文/蒼蘭香墨 我猛地睜開(kāi)眼,長(zhǎng)吁一口氣:“原來(lái)是場(chǎng)噩夢(mèng)啊……” “哼埂淮!你這毒婦竟也來(lái)了姑隅?” 一聲冷哼從身側(cè)響起,我...
    開(kāi)封第一講書(shū)人閱讀 36,973評(píng)論 0 259
  • 序言:老撾萬(wàn)榮一對(duì)情侶失蹤倔撞,失蹤者是張志新(化名)和其女友劉穎讲仰,沒(méi)想到半個(gè)月后,有當(dāng)?shù)厝嗽跇?shù)林里發(fā)現(xiàn)了一具尸體痪蝇,經(jīng)...
    沈念sama閱讀 43,466評(píng)論 1 300
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡鄙陡,尸身上長(zhǎng)有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 35,937評(píng)論 2 323
  • 正文 我和宋清朗相戀三年,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了躏啰。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片趁矾。...
    茶點(diǎn)故事閱讀 38,039評(píng)論 1 333
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡,死狀恐怖给僵,靈堂內(nèi)的尸體忽然破棺而出毫捣,到底是詐尸還是另有隱情,我是刑警寧澤,帶...
    沈念sama閱讀 33,701評(píng)論 4 323
  • 正文 年R本政府宣布培漏,位于F島的核電站溪厘,受9級(jí)特大地震影響,放射性物質(zhì)發(fā)生泄漏牌柄。R本人自食惡果不足惜畸悬,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 39,254評(píng)論 3 307
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望珊佣。 院中可真熱鬧蹋宦,春花似錦、人聲如沸咒锻。這莊子的主人今日做“春日...
    開(kāi)封第一講書(shū)人閱讀 30,259評(píng)論 0 19
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽(yáng)惑艇。三九已至蒿辙,卻和暖如春,著一層夾襖步出監(jiān)牢的瞬間滨巴,已是汗流浹背思灌。 一陣腳步聲響...
    開(kāi)封第一講書(shū)人閱讀 31,485評(píng)論 1 262
  • 我被黑心中介騙來(lái)泰國(guó)打工, 沒(méi)想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留恭取,地道東北人泰偿。 一個(gè)月前我還...
    沈念sama閱讀 45,497評(píng)論 2 354
  • 正文 我出身青樓,卻偏偏與公主長(zhǎng)得像蜈垮,于是被迫代替她去往敵國(guó)和親耗跛。 傳聞我的和親對(duì)象是個(gè)殘疾皇子,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 42,786評(píng)論 2 345

推薦閱讀更多精彩內(nèi)容