Flutter數據存儲之shared

Flutter數據存儲之shared_preferences

前言

做過android開發的人都知道,可以利用SharedPreferences這個輕量級的存儲類來保存鍵值對信息,在Flutter中,我們可以使用shared_preferences庫來同時支持Android和ios平臺。

參考:

1.《Flutter中的本地存儲》

  1. 《Flutter知識點:數據存儲之SharedPreferences》
  2. shared_preferences 0.4.2

使用介紹

  1. 在pubspec.yaml文件中添加依賴
shared_preferences: "^0.4.2"

添加的位置如圖所示:


Flutter數據存儲之shared_preferences


添加依賴

  1. 安裝依賴庫
  2. 執行$ flutter packages get命令
  3. 在相應文件中導入該庫
import 'package:shared_preferences/shared_preferences.dart';
  1. 增刪改查
  2. 增:
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就是你存貯的名稱,value就是你存儲的值

刪:

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

改:

改和增是一樣的,只需要再執行一次setXXX()方法即可覆蓋之前的數據。

查:


Flutter數據存儲之shared_preferences

查詢操作的幾個API

使用示例


Flutter數據存儲之shared_preferences

首先我們創建了一個TextField用來獲取用戶輸入,然後我們再下面定義看了連個按鈕,每當當即存儲按鈕都會觸發save() 方法,每當點擊獲取按鈕都會觸發get()方法。

先來看看save()方法

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

在上面save方法中我們可以看到我們給它加上了async和await關鍵字,因為SharedPreferences的存貯也是一個輕量級的耗時操作,所以我們也是需要在異步中進行的。

我們使用SharedPreferences.getInstance()方法來實例化SharedPreferences對象,使用它的setString方法來存儲用戶輸入的字符串。

setString(key, value)

接下來來看下get方法

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

在get方法中我們同樣實例化了一個SharedPreferences對象,並且調用SharedPreferences的getString方法來獲取我們存入的對象。

getString(key)

key就是我們剛才存入的值,我們通過這個值可以在本地查找到我們存入的對象並返回。

同樣的,get方法也是耗時操作,同樣需要異步執行,我們使用async和await來使得get方法異步並返回了一個泛型為String的Future對象。

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

我們使用獲得的Future對象調用then()方法,當get方法執行完後就會自動觸發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: "請輸入用戶名",
helperText: "註冊時填寫的名字"),
),
RaisedButton(
color: Colors.blueAccent,
child: Text("存儲"),
onPressed: () {
save();
Scaffold.of(context).showSnackBar(
new SnackBar(content: Text("數據存儲成功")));
}),
RaisedButton(
color: Colors.greenAccent,
child: Text("獲取"),
onPressed: () {
Future<string> userName = get();
userName.then((String userName) {
Scaffold.of(context).showSnackBar(
SnackBar(content: Text("數據獲取成功:$userName")));
});
}),
],
);
}),
),
);
});
}
}
/<string>/<widget>/<string>

鍵值對文件存放路徑


Flutter數據存儲之shared_preferences



分享到:


相關文章: