【Flutter 實戰】大量複雜資料持久化
阿新 • • 發佈:2020-09-24
![](https://img2020.cnblogs.com/other/467322/202009/467322-20200924200424772-1691822451.png)
> **老孟導讀**:上一篇文章講解了 Android 和 iOS 的檔案目錄系統,此篇文章講解如何使用 **SQLite** 儲存資料。
歡迎大家**投稿**:http://laomengit.com/plan/Contribution.html
儲存資料到本地是應用程式非常重要的功能之一,比如如下場景:一個新聞類或者部落格類的應用程式,開啟後進入首頁,如果本地沒有儲存資料,則需要通過網路獲取資料,在返回資料之前,使用者看到的是空白頁面,而如果本地儲存了部分新聞,則顯示這部分資料,等待最新的資料返回時在重新整理即可,對使用者體驗來說,明顯第二種體驗更佳。
**SQLite** 是目前最受歡迎的本地儲存框架之一,此篇文章將會介紹如何使用 SQLite 儲存、查詢、刪除資料等。
>SQLite pub地址:[https://pub.flutter-io.cn/packages/sqflite](https://pub.flutter-io.cn/packages/sqflite)
>
>SQLite Github:[https://github.com/tekartik/sqflite](https://github.com/tekartik/sqflite)
>
>SQLite 講解:[https://www.sqlitetutorial.net/](https://www.sqlitetutorial.net/)
如果您對資料庫和 SQL 語句相關知識有一點了解,下面的講解會比較容易理解,如果對資料庫和 SQL 語句相關知識一點不瞭解,那下面的講解理解起來可能會有一定的難度。
那是否需要先去學習資料庫和 SQL 語句相關知識?我覺得沒有必要,應用程式使用的資料庫和 SQL 語句相關知識都是非常基礎的,比如開啟資料庫、建立表、SQL 查詢語句、更新語句、刪除語句等,這些都是固定的格式,固定語句記住即可。
### 新增依賴
SQLite 並不是 Flutter 系統自帶的,而是一個第三方外掛,在專案的 `pubspec.yaml` 檔案中新增依賴:
```dart
dependencies:
sqflite: ^1.3.1
path_provider: ^1.6.11
```
執行命令:
```
flutter pub get
```
使用 SQLite 建立資料庫的時候需要本地路徑做為引數,所以新增`path_provider` 外掛獲取本地路徑。
### 單例模式建立 SQLite 訪問
使用 SQLite 並不是一定要使用單例模式,單例模式是為了保證整個應用程式僅有一個數據庫例項和全域性訪問。
```dart
class DBProvider{
static final DBProvider _singleton = DBProvider._internal();
factory DBProvider() {
return _singleton;
}
DBProvider._internal();
}
```
### 初始化資料庫
```dart
import 'dart:io';
import 'package:path/path.dart';
import 'package:path_provider/path_provider.dart';
import 'package:sqflite/sqflite.dart';
class DBProvider {
static final DBProvider _singleton = DBProvider._internal();
factory DBProvider() {
return _singleton;
}
DBProvider._internal();
static Database _db;