1.先設定expanse
設定lib\models\expense.dart¶
Code¶
import 'package:hive/hive.dart';
part 'expense.g.dart';
@HiveType(typeId: 0)
class Transaction {
@HiveField(0)
final String title;
@HiveField(1)
final double amount;
@HiveField(2) // 新增一個 HiveField
final int? key ; // 新增一個 key 屬性
Transaction({required this.title, required this.amount, this.key});
}
解釋¶
Hive數據模型解釋¶
在上面的代碼中,我們看到了一個Hive數據模型的示例。讓我們逐一解釋每個部分:
-
import ‘package:hive/hive.dart’;:
- 這行代碼導入了Hive庫,Hive是Flutter中一種輕量級的本地存儲解決方案。
-
part ‘expense.g.dart’;:
- 這行代碼是Dart中使用Hive時的一種約定,用於指定生成的代碼的位置。
-
@HiveType(typeId: 0):
- 這個注解標記了一個類作為Hive數據庫中的一個數據類型,
typeId指定了該類型在數據庫中的唯一標識符。
- 這個注解標記了一個類作為Hive數據庫中的一個數據類型,
-
class Transaction:
- 這個類定義了一個名為Transaction的數據模型,表示一個交易。
-
@HiveField(0):
- 這個注解標記了一個類的屬性,表示該屬性將被存儲在Hive數據庫中。括號中的數字是屬性在數據庫中的索引。
-
final String title;:
- 這行代碼定義了一個字符串類型的屬性
title,表示交易的標題。
- 這行代碼定義了一個字符串類型的屬性
-
final double amount;:
- 這行代碼定義了一個雙精度浮點數類型的屬性
amount,表示交易的金額。
- 這行代碼定義了一個雙精度浮點數類型的屬性
-
@HiveField(2) final int? key;:
- 這行代碼定義了一個可空整數類型的屬性
key,表示交易的鍵。@HiveField(2)注解將該屬性存儲在數據庫中,並指定了在數據庫中的索引。
- 這行代碼定義了一個可空整數類型的屬性
-
Transaction({required this.title, required this.amount, this.key});:
- 這是一個構造函數,用於創建Transaction類的實例。它接受交易的標題、金額和可選的鍵作為參數,並初始化對象的屬性。
這個數據模型允許我們在Hive數據庫中存儲交易對象,每個交易對象有一個標題、一個金額和一個可選的鍵。
接著利用
生成lib\models\expense.g.dart
內容解釋¶
Hive數據模型適配器解釋¶
上面的代碼是一個Hive數據模型的適配器。讓我們逐一解釋每個部分:
-
part of ‘expense.dart’;:
- 這行代碼指定了生成的適配器代碼的位置,與數據模型代碼文件相關聯。 -
class TransactionAdapter extends TypeAdapter
{ :
- 這個類是一個適配器類,用於將Transaction對象序列化和反序列化,使其能夠在Hive數據庫中存儲和檢索。 -
@override final int typeId = 0;:
- 這行代碼定義了該適配器處理的數據類型的唯一標識符。在Hive中,每種數據類型都必須有一個唯一的typeId。 -
@override Transaction read(BinaryReader reader) { … }:
- 這個方法負責將字節流反序列化為Transaction對象。它讀取字節流中的每個字段,並將其轉換為Transaction對象的屬性。 -
@override void write(BinaryWriter writer, Transaction obj) { … }:
- 這個方法負責將Transaction對象序列化為字節流。它將Transaction對象的屬性寫入字節流中,以便在Hive數據庫中進行存儲。 -
@override int get hashCode => typeId.hashCode;:
- 這行代碼重寫了hashCode方法,用於獲取適配器的哈希碼。 -
@override bool operator ==(Object other) { … }:
- 這行代碼重寫了等號運算符,用於判斷兩個適配器是否相等。它比較了適配器的類型和typeId。
適配器類使得我們可以將自定義的數據模型對象與Hive數據庫進行交互,實現了對象的序列化和反序列化。
Created : 13 novembre 2024