Skip to content

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數據模型的示例。讓我們逐一解釋每個部分:

  1. import ‘package:hive/hive.dart’;:

    • 這行代碼導入了Hive庫,Hive是Flutter中一種輕量級的本地存儲解決方案。
  2. part ‘expense.g.dart’;:

    • 這行代碼是Dart中使用Hive時的一種約定,用於指定生成的代碼的位置。
  3. @HiveType(typeId: 0):

    • 這個注解標記了一個類作為Hive數據庫中的一個數據類型,typeId指定了該類型在數據庫中的唯一標識符。
  4. class Transaction:

    • 這個類定義了一個名為Transaction的數據模型,表示一個交易。
  5. @HiveField(0):

    • 這個注解標記了一個類的屬性,表示該屬性將被存儲在Hive數據庫中。括號中的數字是屬性在數據庫中的索引。
  6. final String title;:

    • 這行代碼定義了一個字符串類型的屬性title,表示交易的標題。
  7. final double amount;:

    • 這行代碼定義了一個雙精度浮點數類型的屬性amount,表示交易的金額。
  8. @HiveField(2) final int? key;:

    • 這行代碼定義了一個可空整數類型的屬性key,表示交易的鍵。@HiveField(2)注解將該屬性存儲在數據庫中,並指定了在數據庫中的索引。
  9. Transaction({required this.title, required this.amount, this.key});:

    • 這是一個構造函數,用於創建Transaction類的實例。它接受交易的標題、金額和可選的鍵作為參數,並初始化對象的屬性。

這個數據模型允許我們在Hive數據庫中存儲交易對象,每個交易對象有一個標題、一個金額和一個可選的鍵。

接著利用

flutter pub run build_runner build

生成lib\models\expense.g.dart

內容解釋

Hive數據模型適配器解釋

上面的代碼是一個Hive數據模型的適配器。讓我們逐一解釋每個部分:

  1. part of ‘expense.dart’;:
    - 這行代碼指定了生成的適配器代碼的位置,與數據模型代碼文件相關聯。

  2. class TransactionAdapter extends TypeAdapter {:
    - 這個類是一個適配器類,用於將Transaction對象序列化和反序列化,使其能夠在Hive數據庫中存儲和檢索。

  3. @override final int typeId = 0;:
    - 這行代碼定義了該適配器處理的數據類型的唯一標識符。在Hive中,每種數據類型都必須有一個唯一的typeId。

  4. @override Transaction read(BinaryReader reader) { … }:
    - 這個方法負責將字節流反序列化為Transaction對象。它讀取字節流中的每個字段,並將其轉換為Transaction對象的屬性。

  5. @override void write(BinaryWriter writer, Transaction obj) { … }:
    - 這個方法負責將Transaction對象序列化為字節流。它將Transaction對象的屬性寫入字節流中,以便在Hive數據庫中進行存儲。

  6. @override int get hashCode => typeId.hashCode;:
    - 這行代碼重寫了hashCode方法,用於獲取適配器的哈希碼。

  7. @override bool operator ==(Object other) { … }:
    - 這行代碼重寫了等號運算符,用於判斷兩個適配器是否相等。它比較了適配器的類型和typeId。

適配器類使得我們可以將自定義的數據模型對象與Hive數據庫進行交互,實現了對象的序列化和反序列化。


Last update : 13 novembre 2024
Created : 13 novembre 2024

Comments

Comments