readful/lib/main.dart
ddshi 02010ff972 feat: 完成数据持久化阶段并规划UI开发
📊 数据持久化阶段完成:
- 完成4个数据模型的Hive集成(Book, Bookshelf, Bookmark, Highlight)
- 实现4个Repository数据访问层
- 生成5个TypeAdapter自动序列化文件
- 完成所有模型的CRUD操作和测试验证

📚 项目文档更新:
- 新增数据持久化阶段完成总结文档
- 更新CLAUDE.md项目主文档
- 完善项目结构说明和开发进度

🚀 UI开发阶段规划:
- 定义产品定位:类似微信读书的Material Design电子书阅读器
- 制定4阶段开发计划:UI基础架构→顶部导航→首页内容→数据集成
- 明确页面结构:底部Tab导航(首页/书库/统计/我的)
- 规划核心功能:搜索、导入、最近阅读、摘录列表

🎯 下一里程碑:
- 开始UI基础架构搭建
- 实现底部Tab导航和Material Design主题系统

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

Co-Authored-By: Claude <noreply@anthropic.com>
2025-12-01 17:34:50 +08:00

261 lines
8.1 KiB
Dart
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

import "package:flutter/material.dart";
import "package:hive_flutter/hive_flutter.dart";
import 'services/database_service.dart';
import 'services/book_repository.dart';
import 'services/bookmark_repository.dart';
import 'services/bookshelf_repository.dart';
import 'services/highlight_repository.dart';
import 'models/book.dart';
import 'models/bookshelf.dart';
import 'models/bookmark.dart';
import 'models/highlight.dart';
void main() async {
// 确保Flutter初始化完成
WidgetsFlutterBinding.ensureInitialized();
// 初始化Hive数据库
try {
await DatabaseService.instance.init();
print('✅ 数据库初始化成功');
// 运行数据持久化测试
await runBookRepositoryTest();
await runBookshelfRepositoryTest();
await runBookmarkRepositoryTest();
await runHighlightRepositoryTest();
} catch (e) {
print('❌ 数据库初始化失败: $e');
}
runApp(const MyApp());
}
/// 测试BookRepository的数据持久化功能
Future<void> runBookRepositoryTest() async {
final bookRepository = BookRepository();
print('\n🧪 开始测试BookRepository数据持久化功能...\n');
try {
// 1. 获取当前所有书籍
List<Book> currentBooks = await bookRepository.getAllBooks();
print('📚 当前书籍数量: ${currentBooks.length}');
// 2. 创建测试书籍
final testBook = Book(
id: 'test_book_001',
title: 'Flutter开发入门',
author: '张三',
publisher: '技术出版社',
description: '这是一本关于Flutter开发的入门书籍',
filePath: '/path/to/flutter_book.epub',
format: BookFormat.epub,
fileSize: 1024 * 1024, // 1MB
addedDate: DateTime.now(),
status: ReadingStatus.pending,
totalPages: 300,
);
// 3. 添加测试书籍
await bookRepository.addBook(testBook);
// 4. 再次获取所有书籍
List<Book> updatedBooks = await bookRepository.getAllBooks();
print('📚 添加后书籍数量: ${updatedBooks.length}');
// 5. 根据ID查找书籍
Book? foundBook = await bookRepository.getBookById(testBook.id);
if (foundBook != null) {
print('🔍 成功找到书籍: ${foundBook.title}');
print(' - 作者: ${foundBook.author}');
print(' - 格式: ${foundBook.format.name}');
print(' - 状态: ${foundBook.status.name}');
} else {
print('❌ 未找到指定书籍');
}
// 6. 测试更新书籍
final updatedBook = testBook.copyWith(status: ReadingStatus.completed);
await bookRepository.updateBook(updatedBook);
print('✅ 书籍状态更新为: ${updatedBook.status.name}');
// 7. 验证更新后的状态
Book? updatedFoundBook = await bookRepository.getBookById(testBook.id);
if (updatedFoundBook != null &&
updatedFoundBook.status == ReadingStatus.completed) {
print('✅ 状态更新验证成功!');
} else {
print('❌ 状态更新验证失败!');
}
print('\n✅ BookRepository测试完成所有功能正常工作\n');
} catch (e) {
print('❌ BookRepository测试失败: $e\n');
}
}
///测试书架持久化
Future<void> runBookshelfRepositoryTest() async {
final bookshelfRepository = BookshelfRepository();
print('\n🧪 开始测试BookshelfRepository数据持久化功能...\n');
try {
// 1. 获取当前所有书架
List<Bookshelf> currentBookshelves =
await bookshelfRepository.getAllBookshelves();
print('📚 当前书架数量: ${currentBookshelves.length}');
// 2. 创建测试书架
final testBookshelf = Bookshelf(
id: 'test_shelf_001',
name: '我的测试书架',
createdTime: DateTime.now(),
lastModifiedTime: DateTime.now(),
bookCount: 0,
type: BookshelfType.custom,
isDefault: false,
sortOrder: 1,
);
// 3. 添加测试书架
await bookshelfRepository.addBookshelf(testBookshelf);
// 4. 再次获取所有书架
List<Bookshelf> updatedBookshelves =
await bookshelfRepository.getAllBookshelves();
print('📚 添加后书架数量: ${updatedBookshelves.length}');
print('\n✅ BookshelfRepository测试完成所有功能正常工作\n');
} catch (e) {
print('❌ BookshelfRepository测试失败: $e\n');
}
}
///测试bookmark持久化
Future<void> runBookmarkRepositoryTest() async {
final databaseService = DatabaseService.instance;
print('\n🧪 开始测试Bookmark数据持久化功能...\n');
try {
// 1. 获取Bookmark Box
final bookmarksBox = databaseService.getBookmarksBox();
print('📚 当前书签数量: ${bookmarksBox.length}');
// 2. 创建测试书签
final testBookmark = Bookmark(
id: 'test_bookmark_001',
bookId: 'test_book_001',
chapterId: null,
title: '第一章开始',
description: '这是第一章的书签',
pageIndex: 1,
position: 0.0,
previewText: '这是书签的预览文本',
createdTime: DateTime.now(),
sortOrder: 1,
);
// 3. 添加测试书签
await bookmarksBox.put(testBookmark.id, testBookmark);
// 4. 再次获取所有书签
print('📚 添加后书签数量: ${bookmarksBox.length}');
// 5. 根据ID查找书签
Bookmark? foundBookmark = bookmarksBox.get(testBookmark.id);
if (foundBookmark != null) {
print('🔍 成功找到书签: ${foundBookmark.title}');
print(' - 所属书籍ID: ${foundBookmark.bookId}');
print(' - 页码索引: ${foundBookmark.pageIndex}');
} else {
print('❌ 未找到指定书签');
}
print('\n✅ Bookmark测试完成所有功能正常工作\n');
} catch (e) {
print('❌ Bookmark测试失败: $e\n');
}
}
///測試Highlight持久化
Future<void> runHighlightRepositoryTest() async {
final highlightRepository = HighlightRepository();
print('\n🧪 开始测试HighlightRepository数据持久化功能...\n');
try {
// 1. 获取当前所有高亮
List<Highlight> currentHighlights =
await highlightRepository.getAllHighlights();
print('📚 当前高亮数量: ${currentHighlights.length}');
// 2. 创建测试高亮
final testHighlight = Highlight(
id: 'test_highlight_001',
bookId: 'test_book_001',
chapterId: null,
color: HighlightColor.yellow,
annotationType: AnnotationType.note,
createdTime: DateTime.now(),
selectedText: '这是一个测试高亮文本',
startIndex: 100,
endIndex: 130,
);
// 3. 添加测试高亮
await highlightRepository.addHighlight(testHighlight);
// 4. 根据ID查找高亮
Highlight? foundHighlight =
await highlightRepository.getHighlightById(testHighlight.id);
if (foundHighlight != null) {
print('🔍 成功找到高亮: ${foundHighlight.selectedText}');
print(' - 所属书籍ID: ${foundHighlight.bookId}');
print(' - 颜色: ${foundHighlight.color.name}');
} else {
print('❌ 未找到指定高亮');
}
// 5. 再次获取所有高亮
List<Highlight> updatedHighlights =
await highlightRepository.getAllHighlights();
print('📚 添加后高亮数量: ${updatedHighlights.length}');
print('\n✅ HighlightRepository测试完成所有功能正常工作\n');
} catch (e) {
print('❌ HighlightRepository测试失败: $e\n');
}
}
class MyApp extends StatelessWidget {
const MyApp({super.key});
@override
Widget build(BuildContext context) {
return MaterialApp(
title: "Readful",
theme: ThemeData(primarySwatch: Colors.blue),
home: Scaffold(
appBar: AppBar(title: const Text('readful 电子书阅读器')),
body: const Center(
child: Column(
mainAxisAlignment: MainAxisAlignment.center,
children: [
Text('欢迎使用 readful', style: TextStyle(fontSize: 20)),
SizedBox(height: 20),
Text('✅ 数据库已初始化', style: TextStyle(color: Colors.green)),
Text('✅ BookRepository测试完成',
style: TextStyle(color: Colors.green)),
SizedBox(height: 10),
Text('请查看控制台输出查看详细测试结果'),
],
),
),
),
);
}
}