總的來說目前有三種手段
sqflite:https://pub.dartlang.org/packages/sqflite
shared_preferences:https://pub.dartlang.org/packages/shared_preferences
path_provider:https://pub.dartlang.org/packages/path_provider
sqflite
sqflite是一款輕量級的關系型資料庫,類似SQLite。
在Flutter平台我們使用sqflite庫來同時支援Android 和iOS。
使用介紹
1.首選需要在pubspec.yaml 導入庫
2.dart類中導入庫
image.png
3.建立-增删改查
建立:
增:
删:
改:
查:
shared_preferences
1.首選需要在pubspec.yaml 導入庫
shared_preferences 0.5.3+4
2在dart中引入庫
目前支援這五種類型,類似安卓中的用法不再贅述
有的人可能會問,那json對象怎麼儲存呢?比如User
LocalStorage.save(Constants.USER_INFO, response.toString());
直接把json.toString,轉化成String儲存即可
用的時候
static User getUser() {
///擷取本地登入使用者資訊
var userText = LocalStorage.get(Constants.USER_INFO);
if (userText != null) {
var userMap = json.decode(userText);
User user = User.fromJson(userMap);
return user;
} else {
return User.empty();
}
}
path_provider
在某些時候可能需要下載下傳或儲存檔案到手機本地,這時候使用檔案讀寫接口可以實作。
在 Flutter 裡實作檔案讀寫,需要使用 path_provider 和 dart 的 io 子產品。path_provider 負責查找 iOS/Android 的目錄檔案,IO 子產品負責對檔案進行讀寫。
首先安裝依賴:
dependencies:
path_provider 1.3.0
通常來說會有以下幾個步驟:
- 找到正确的本地路徑。
- 建立對檔案位置的引用。
- 将資料寫入檔案。
- 從檔案中讀取資料。
本地路徑
path_provider 插件提供了一種平台不可知的方式來通路裝置檔案系統上的常用位置。 該插件目前支援通路兩個系統檔案位置:
- 臨時目錄: 一個臨時目錄(緩存),系統可以随時清除。 在 iOS 上,這對應于 NSTemporaryDirectory() 傳回的值。在 Android 上,這是 getCacheDir() 回的值。
-
文檔目錄:應用程式的目錄,用于存儲隻有它可以通路的檔案。
隻有當應用程式被删除時,系統才會清除目錄。 在 iOS 上,這對應于 NSDocumentDirectory。 在 Android 上這是
AppData 目錄。
接下來使用 path_provider 查找本地路徑。
import 'package:path_provider/path_provider.dart';
localPath() async {
try {
var tempDir = await getTemporaryDirectory();
String tempPath = tempDir.path;
var appDocDir = await getApplicationDocumentsDirectory();
String appDocPath = appDocDir.path;
print('臨時目錄: ' + tempPath);
print('文檔目錄: ' + appDocPath);
}
catch(err) {
print(err);
}
}
// 臨時目錄: /data/user/0/com.example.myapp/cache
// 文檔目錄: /data/user/0/com.example.myapp/app_flutter
檔案位置引用
一旦我們知道在哪裡存儲檔案,我們需要建立一個檔案的完整位置的引用。 我們可以使用 dart:io 庫中的 File 類來實作此目的。
localFile(path) async {
return new File('$path/counter.json');
}
讀寫檔案
在對檔案引用之後,就可以對檔案進行讀寫操作了。
// 讀取 json 資料
readJSON() async {
try {
final file = await localFile(await localPath());
String str = await file.readAsString();
return json.decode(str);
}
catch (err) {
print(err);
}
}
// 寫入 json 資料
writeJSON(obj) {
try {
final file = await localFile(await localPath());
return file.writeAsString(encode(obj));
}
catch (err) {
print(err);
}
}