今天其實主要想講的主題是 Localstorage
在這部分稍微查閱了一下常用的有
而我們今天要介紹的這個套件便是由 Hive 的原作者所強化實作出來的
(有點像 Provider 跟 Riverpod 之間的關係)
因此作者也建議嘗試看看 Isar
那我們今天就針對 Isar 的核心觀念來闡述吧
Super Fast Cross Platform Database for Flutter
Isar 是由 Hive 的作者重新打造的一個 NoSQL 資料庫
除了主要的 Key-Value 儲存方式外,還提供了許多有趣的功能
如全文搜索
、資料Filter
等功能
而在開始之前安裝的部分則需要在既有的 Flutter 專案中
執行
flutter pub add isar
flutter pub add isar_flutter_libs
flutter pub add -d isar_generator
flutter pub add -d build_runner
在完成後續的 Schema 建立後
需要執行 build_runner 來產生對應的 <model>.g.dart
以供後續 CRUD 操作
首先是定義 Schema
import 'package:isar/isar.dart';
part 'User.g.dart';
@Collection()
class User {
Id id = Isar.autoIncrement; // you can also use id = null to auto increment
String? name;
int? age;
}
注意!!在執行 flutter run build_runner build
前,第三行會有錯誤提示
而在這邊可以看到
幾種簡單的資料型態
如: Id (Isar 內部索引用id,實質型態為int)、String、int、Datetime ... 等
詳細的資料型別可以參考 Schema
接下來便是 CRUD 了
在所有操作之前得先透過 Dependency Injection 或是全域變數的方式來創建實體
final isar = await Isar.open([ContactSchema]);
而在操作上則可透過
透過 put 可以完成資料插入或更新資料
而 writeTxn
則是進行寫入行為的 Transaction
用來確保行為成功並正確
Future<void> createUsers(User user) async {
_isar.writeTxn(() async => {_isar.users.put(user)});
}
Isar _isar; // isar 實體
Future<List<User>> readUser() async {
List<User> result = await _isar.users.where().findAll();
return result;
}
其中還包含許多 filter 可以操作並且篩選出想要的資料
透過傳入 id 來進行資料刪除
Future<void> deleteUser(Id id) async {
_isar!.writeTxn(() async => {_isar!.users.delete(id)});
}