iT邦幫忙

2022 iThome 鐵人賽

DAY 19
0
Mobile Development

通徹 Flutter 學習路徑系列 第 19

通徹 Flutter 學習路徑 Day 19 - 資料放哪裡?我們來試試看 Isar 吧!

  • 分享至 

  • xImage
  •  

今天其實主要想講的主題是 Localstorage
在這部分稍微查閱了一下常用的有

而我們今天要介紹的這個套件便是由 Hive 的原作者所強化實作出來的
(有點像 Provider 跟 Riverpod 之間的關係)
因此作者也建議嘗試看看 Isar
那我們今天就針對 Isar 的核心觀念來闡述吧


什麼是 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

首先是定義 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

接下來便是 CRUD 了

在所有操作之前得先透過 Dependency Injection 或是全域變數的方式來創建實體

final isar = await Isar.open([ContactSchema]);

而在操作上則可透過

create & update

透過 put 可以完成資料插入或更新資料
writeTxn 則是進行寫入行為的 Transaction
用來確保行為成功並正確

Future<void> createUsers(User user) async {
    _isar.writeTxn(() async => {_isar.users.put(user)});
  }

read

Isar _isar; // isar 實體

Future<List<User>> readUser() async {
    List<User> result = await _isar.users.where().findAll();
    return result;
  }

其中還包含許多 filter 可以操作並且篩選出想要的資料

delete

透過傳入 id 來進行資料刪除

Future<void> deleteUser(Id id) async {
    _isar!.writeTxn(() async => {_isar!.users.delete(id)});
  }

參考資料

Isar
Isar Youtube


上一篇
通徹 Flutter 學習路徑 Day 18 - 今天來聊一下設計架構(MVVM)
下一篇
通徹 Flutter 學習路徑 Day 20 - 來介紹一下 Dio 吧
系列文
通徹 Flutter 學習路徑30
圖片
  直播研討會
圖片
{{ item.channelVendor }} {{ item.webinarstarted }} |
{{ formatDate(item.duration) }}
直播中

尚未有邦友留言

立即登入留言