readful/lib/models/book.g.dart
ddshi fa09de7560 feat: 完成Hive数据库数据持久化集成
## 🎯 里程碑完成:数据层架构建设

###  数据持久化实现
- Hive数据库完整集成 - 依赖配置、初始化、TypeAdapter注册
- BookRepository数据访问层 - 完整CRUD操作实现
- 自动代码生成 - build_runner + hive_generator集成
- 数据持久化验证 - 应用启动时自动测试所有功能

### 🏗️ 架构组件
- DatabaseService - 单例模式数据库管理服务
- BookRepository - Repository模式数据访问抽象层
- TypeAdapter - 自动生成对象序列化适配器
- 错误处理机制 - 完善的异常捕获和日志记录

### 📊 代码成果
- 新增2个服务类文件 (database_service.dart, book_repository.dart)
- 自动生成1个TypeAdapter文件 (book.g.dart)
- 更新4个数据模型文件 (添加Hive注解)
- 完善main.dart集成测试验证
- 新增1篇Hive详细教程文档 (06_Hive数据库数据持久化详解.md)

### 🧪 测试验证
- 数据库初始化测试 
- CRUD操作完整测试 
- 数据持久化验证 
- TypeAdapter序列化测试 
- 错误处理机制测试 

### 📚 文档完善
- 更新项目主文档 (CLAUDE.md) - 完整进度和成果统计
- 更新学习阶段总结 (05_数据模型设计阶段总结.md)
- 新增Hive使用详解 (06_Hive数据库数据持久化详解.md)
- 详细的代码示例和最佳实践指南

🚀 Generated with [Claude Code](https://claude.com/claude-code)

Co-Authored-By: Claude <noreply@anthropic.com>
2025-11-25 16:06:39 +08:00

174 lines
4.1 KiB
Dart

// GENERATED CODE - DO NOT MODIFY BY HAND
part of 'book.dart';
// **************************************************************************
// TypeAdapterGenerator
// **************************************************************************
class BookAdapter extends TypeAdapter<Book> {
@override
final int typeId = 2;
@override
Book read(BinaryReader reader) {
final numOfFields = reader.readByte();
final fields = <int, dynamic>{
for (int i = 0; i < numOfFields; i++) reader.readByte(): reader.read(),
};
return Book(
id: fields[0] as String,
title: fields[1] as String,
author: fields[2] as String?,
publisher: fields[3] as String?,
description: fields[4] as String?,
coverImagePath: fields[5] as String?,
filePath: fields[6] as String,
format: fields[7] as BookFormat,
fileSize: fields[8] as int,
addedDate: fields[9] as DateTime,
status: fields[10] as ReadingStatus,
rating: fields[11] as double?,
tags: (fields[12] as List).cast<String>(),
totalPages: fields[13] as int,
);
}
@override
void write(BinaryWriter writer, Book obj) {
writer
..writeByte(14)
..writeByte(0)
..write(obj.id)
..writeByte(1)
..write(obj.title)
..writeByte(2)
..write(obj.author)
..writeByte(3)
..write(obj.publisher)
..writeByte(4)
..write(obj.description)
..writeByte(5)
..write(obj.coverImagePath)
..writeByte(6)
..write(obj.filePath)
..writeByte(7)
..write(obj.format)
..writeByte(8)
..write(obj.fileSize)
..writeByte(9)
..write(obj.addedDate)
..writeByte(10)
..write(obj.status)
..writeByte(11)
..write(obj.rating)
..writeByte(12)
..write(obj.tags)
..writeByte(13)
..write(obj.totalPages);
}
@override
int get hashCode => typeId.hashCode;
@override
bool operator ==(Object other) =>
identical(this, other) ||
other is BookAdapter &&
runtimeType == other.runtimeType &&
typeId == other.typeId;
}
class BookFormatAdapter extends TypeAdapter<BookFormat> {
@override
final int typeId = 0;
@override
BookFormat read(BinaryReader reader) {
switch (reader.readByte()) {
case 0:
return BookFormat.epub;
case 1:
return BookFormat.mobi;
case 2:
return BookFormat.txt;
case 3:
return BookFormat.pdf;
default:
return BookFormat.epub;
}
}
@override
void write(BinaryWriter writer, BookFormat obj) {
switch (obj) {
case BookFormat.epub:
writer.writeByte(0);
break;
case BookFormat.mobi:
writer.writeByte(1);
break;
case BookFormat.txt:
writer.writeByte(2);
break;
case BookFormat.pdf:
writer.writeByte(3);
break;
}
}
@override
int get hashCode => typeId.hashCode;
@override
bool operator ==(Object other) =>
identical(this, other) ||
other is BookFormatAdapter &&
runtimeType == other.runtimeType &&
typeId == other.typeId;
}
class ReadingStatusAdapter extends TypeAdapter<ReadingStatus> {
@override
final int typeId = 1;
@override
ReadingStatus read(BinaryReader reader) {
switch (reader.readByte()) {
case 0:
return ReadingStatus.reading;
case 1:
return ReadingStatus.completed;
case 2:
return ReadingStatus.pending;
default:
return ReadingStatus.reading;
}
}
@override
void write(BinaryWriter writer, ReadingStatus obj) {
switch (obj) {
case ReadingStatus.reading:
writer.writeByte(0);
break;
case ReadingStatus.completed:
writer.writeByte(1);
break;
case ReadingStatus.pending:
writer.writeByte(2);
break;
}
}
@override
int get hashCode => typeId.hashCode;
@override
bool operator ==(Object other) =>
identical(this, other) ||
other is ReadingStatusAdapter &&
runtimeType == other.runtimeType &&
typeId == other.typeId;
}