## 🎯 里程碑完成:数据层架构建设 ### ✅ 数据持久化实现 - 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>
51 lines
1.4 KiB
Dart
51 lines
1.4 KiB
Dart
import 'package:hive_flutter/hive_flutter.dart';
|
||
import 'package:path_provider/path_provider.dart';
|
||
import '../models/book.dart';
|
||
|
||
class DatabaseService {
|
||
static DatabaseService? _instance;
|
||
static DatabaseService get instance => _instance ??= DatabaseService._();
|
||
|
||
DatabaseService._();
|
||
|
||
late Box<Book> _booksBox;
|
||
|
||
Future<void> init() async {
|
||
try {
|
||
// 1. 获取应用文档目录
|
||
final appDocumentDir = await getApplicationDocumentsDirectory();
|
||
// 2. 初始化Hive
|
||
await Hive.initFlutter(appDocumentDir.path);
|
||
|
||
// 3. 注册枚举TypeAdapter(使用内置的枚举适配器)
|
||
Hive.registerAdapter(BookFormatAdapter());
|
||
Hive.registerAdapter(ReadingStatusAdapter());
|
||
|
||
// 4. 注册Book TypeAdapter
|
||
Hive.registerAdapter(BookAdapter());
|
||
|
||
// 5. 打开Book Box
|
||
_booksBox = await Hive.openBox<Book>('books');
|
||
|
||
print('✅ Hive数据库初始化成功');
|
||
} catch (e) {
|
||
print('❌ Hive数据库初始化失败: $e');
|
||
rethrow; // 重新抛出异常,让调用者知道初始化失败
|
||
}
|
||
}
|
||
|
||
// 获取Book Box的方法
|
||
Box<Book> getBooksBox() {
|
||
if (!Hive.isBoxOpen('books')) {
|
||
throw Exception('Book Box未打开,请先调用init()');
|
||
}
|
||
return _booksBox; // 添加这行返回语句
|
||
}
|
||
|
||
/// 关闭数据库
|
||
Future<void> close() async {
|
||
await _booksBox.close();
|
||
await Hive.close();
|
||
}
|
||
}
|