鸿蒙flutter第三方库适配 - 读书笔记
运行效果图读书笔记是一款专为阅读爱好者设计的应用,支持记录读书笔记、书籍管理、阅读进度跟踪,以及笔记导出分享。应用以温暖的棕色为主色调,营造书香气息。涵盖书架管理、笔记记录、阅读统计、设置中心四大模块。用户可以轻松管理个人书单、记录阅读感悟、追踪阅读进度,让阅读更有价值。序号状态名称Emoji颜色描述1在读📖绿色正在阅读的书籍2已读✅蓝色已读完的书籍3想读📚橙色想要阅读的书籍4弃读❌灰色放弃阅
读书笔记应用
欢迎加入开源鸿蒙跨平台社区:
https://openharmonycrossplatform.csdn.net
适配的第三方库地址:
- sqflite: https://pub.dev/packages/sqflite
- share_plus: https://pub.dev/packages/share_plus
- image_picker: https://pub.dev/packages/image_picker
- flutter_local_notifications: https://pub.dev/packages/flutter_local_notifications
一、项目概述
运行效果图



1.1 应用简介
读书笔记是一款专为阅读爱好者设计的应用,支持记录读书笔记、书籍管理、阅读进度跟踪,以及笔记导出分享。应用以温暖的棕色为主色调,营造书香气息。涵盖书架管理、笔记记录、阅读统计、设置中心四大模块。用户可以轻松管理个人书单、记录阅读感悟、追踪阅读进度,让阅读更有价值。
1.2 核心功能
| 功能模块 | 功能描述 | 实现方式 |
|---|---|---|
| 书籍管理 | 添加、编辑、删除书籍 | sqflite存储 |
| 阅读进度 | 记录和追踪阅读进度 | 进度计算 |
| 笔记记录 | 摘抄、感想、总结、疑问 | 分类笔记 |
| 笔记分享 | 导出分享读书笔记 | share_plus |
| 书籍封面 | 添加书籍封面图片 | image_picker |
| 阅读提醒 | 定时提醒阅读 | flutter_local_notifications |
| 书籍搜索 | 搜索书架中的书籍 | 全文检索 |
| 阅读统计 | 统计阅读数据 | 数据聚合 |
1.3 书籍状态定义
| 序号 | 状态名称 | Emoji | 颜色 | 描述 |
|---|---|---|---|---|
| 1 | 在读 | 📖 | 绿色 | 正在阅读的书籍 |
| 2 | 已读 | ✅ | 蓝色 | 已读完的书籍 |
| 3 | 想读 | 📚 | 橙色 | 想要阅读的书籍 |
| 4 | 弃读 | ❌ | 灰色 | 放弃阅读的书籍 |
1.4 笔记类型定义
| 序号 | 类型名称 | Emoji | 颜色 | 描述 |
|---|---|---|---|---|
| 1 | 摘抄 | 📝 | 紫色 | 精彩语句摘抄 |
| 2 | 感想 | 💭 | 青色 | 阅读感想体会 |
| 3 | 总结 | 📋 | 橙红 | 章节内容总结 |
| 4 | 疑问 | ❓ | 灰蓝 | 阅读中的疑问 |
1.5 技术栈
| 技术领域 | 技术选型 | 版本要求 |
|---|---|---|
| 开发框架 | Flutter | >= 3.0.0 |
| 编程语言 | Dart | >= 2.17.0 |
| 设计规范 | Material Design 3 | - |
| 数据库 | sqflite | >= 2.3.0 |
| 数据分享 | share_plus | >= 7.0.0 |
| 图片选择 | image_picker | >= 1.0.0 |
| 本地通知 | flutter_local_notifications | >= 16.0.0 |
| 数据存储 | shared_preferences | >= 2.0.0 |
| 目标平台 | 鸿蒙OS / Web / Android | API 21+ |
1.6 项目结构
lib/
└── main_reading_notes.dart
├── ReadingNotesApp # 应用入口
├── BookStatus # 书籍状态枚举
├── NoteType # 笔记类型枚举
├── Book # 书籍模型
├── Note # 笔记模型
├── DatabaseHelper # 数据库帮助类
├── HomePage # 主页面(底部导航)
├── _buildLibraryPage # 书架页面
├── _buildNotesPage # 笔记页面
├── _buildStatisticsPage # 统计页面
├── _buildSettingsPage # 设置页面
├── _AddBookForm # 添加书籍表单
├── _BookDetailSheet # 书籍详情
└── BookSearchDelegate # 搜索代理
二、系统架构
2.1 整体架构图
2.2 类图设计
2.3 页面导航流程
2.4 数据流程
三、核心模块设计
3.1 数据模型设计
3.1.1 书籍状态枚举 (BookStatus)
enum BookStatus {
reading(label: '在读', emoji: '📖', color: Color(0xFF4CAF50)),
completed(label: '已读', emoji: '✅', color: Color(0xFF2196F3)),
wishlist(label: '想读', emoji: '📚', color: Color(0xFFFF9800)),
abandoned(label: '弃读', emoji: '❌', color: Color(0xFF9E9E9E));
final String label;
final String emoji;
final Color color;
}
3.1.2 笔记类型枚举 (NoteType)
enum NoteType {
quote(label: '摘抄', emoji: '📝', color: Color(0xFF9C27B0)),
thought(label: '感想', emoji: '💭', color: Color(0xFF00BCD4)),
summary(label: '总结', emoji: '📋', color: Color(0xFFFF5722)),
question(label: '疑问', emoji: '❓', color: Color(0xFF607D8B));
final String label;
final String emoji;
final Color color;
}
3.1.3 书籍模型 (Book)
class Book {
final String id;
final String title;
final String author;
final String? cover;
final int totalPages;
final int currentPage;
final BookStatus status;
final DateTime addedDate;
final DateTime? startDate;
final DateTime? finishDate;
final double rating;
double get progress => totalPages > 0 ? currentPage / totalPages : 0;
Map<String, dynamic> toMap() {
return {
'id': id,
'title': title,
'author': author,
'totalPages': totalPages,
'currentPage': currentPage,
'status': status.index,
// ...
};
}
}
3.1.4 阅读状态分布示例
3.2 数据库设计
3.2.1 数据库表结构
books 表(书籍信息)
| 字段名 | 类型 | 说明 |
|---|---|---|
| id | TEXT | 主键,时间戳 |
| title | TEXT | 书名 |
| author | TEXT | 作者 |
| cover | TEXT | 封面图片路径 |
| totalPages | INTEGER | 总页数 |
| currentPage | INTEGER | 当前页码 |
| status | INTEGER | 状态索引 |
| addedDate | TEXT | 添加日期 |
| startDate | TEXT | 开始阅读日期 |
| finishDate | TEXT | 完成阅读日期 |
| rating | REAL | 评分 |
| description | TEXT | 简介 |
notes 表(笔记信息)
| 字段名 | 类型 | 说明 |
|---|---|---|
| id | TEXT | 主键 |
| bookId | TEXT | 关联书籍ID |
| bookTitle | TEXT | 书名(冗余) |
| type | INTEGER | 笔记类型索引 |
| content | TEXT | 笔记内容 |
| pageNumber | INTEGER | 页码 |
| chapter | TEXT | 章节 |
| createdAt | TEXT | 创建时间 |
| updatedAt | TEXT | 更新时间 |
3.3 页面结构设计
3.3.1 主页面布局
3.3.2 书架页面结构
3.3.3 书籍详情结构
3.4 笔记分享逻辑
四、UI设计规范
4.1 配色方案
应用以温暖的棕色为主色调,营造书香气息:
| 颜色类型 | 色值 | 用途 |
|---|---|---|
| 主色 | #795548 (Brown) | 导航、主题元素 |
| 辅助色 | #A1887F | 次要按钮 |
| 在读状态 | #4CAF50 | 正在阅读 |
| 已读状态 | #2196F3 | 已完成阅读 |
| 想读状态 | #FF9800 | 想要阅读 |
| 弃读状态 | #9E9E9E | 放弃阅读 |
| 背景色 | #FAFAFA | 页面背景 |
| 卡片背景 | #FFFFFF | 信息卡片 |
4.2 状态配色
| 状态 | 色值 | 视觉效果 |
|---|---|---|
| 在读 | #4CAF50 | 绿色 |
| 已读 | #2196F3 | 蓝色 |
| 想读 | #FF9800 | 橙色 |
| 弃读 | #9E9E9E | 灰色 |
4.3 笔记类型配色
| 类型 | 色值 | 视觉效果 |
|---|---|---|
| 摘抄 | #9C27B0 | 紫色 |
| 感想 | #00BCD4 | 青色 |
| 总结 | #FF5722 | 橙红 |
| 疑问 | #607D8B | 灰蓝 |
4.4 字体规范
| 元素 | 字号 | 字重 | 颜色 |
|---|---|---|---|
| 页面标题 | 24px | Bold | 主色 |
| 书名 | 16px | Bold | #000000 |
| 作者 | 12px | Regular | #666666 |
| 进度文字 | 12px | Regular | #888888 |
| 笔记内容 | 14px | Regular | #000000 |
4.5 组件规范
4.5.1 书籍卡片
┌─────────────────────────┐
│ ┌─────────────────┐ │
│ │ │ 📖 │
│ │ 书籍封面 │ │
│ │ │ │
│ └─────────────────┘ │
│ 书名 │
│ 作者 │
│ ══════════════════ │
│ 50/200页 │
└─────────────────────────┘
4.5.2 笔记卡片
┌─────────────────────────────────────┐
│ 📝 摘抄 书名 │
│ │
│ 这是一段精彩的摘抄内容,展示了作者 │
│ 深刻的思考和优美的文字... │
│ │
│ 第50页 · 第三章 4月12日│
└─────────────────────────────────────┘
4.5.3 阅读进度卡片
┌─────────────────────────────────────┐
│ 正在阅读 │
│ 3 本书 │
│ │
│ Flutter开发指南 35% │
│ ═══════════════●══════════ │
│ │
│ 鸿蒙OS应用开发 72% │
│ ══════════════════════●═══ │
└─────────────────────────────────────┘
五、核心功能实现
5.1 书籍管理实现
class DatabaseHelper {
static Future<void> insertBook(Book book) async {
final db = await database;
await db.insert('books', book.toMap(),
conflictAlgorithm: ConflictAlgorithm.replace);
}
static Future<List<Book>> getBooks() async {
final db = await database;
final maps = await db.query('books', orderBy: 'addedDate DESC');
return maps.map((m) => Book.fromMap(m)).toList();
}
static Future<void> updateBook(Book book) async {
final db = await database;
await db.update('books', book.toMap(),
where: 'id = ?', whereArgs: [book.id]);
}
static Future<void> deleteBook(String id) async {
final db = await database;
await db.delete('books', where: 'id = ?', whereArgs: [id]);
await db.delete('notes', where: 'bookId = ?', whereArgs: [id]);
}
}
5.2 笔记管理实现
static Future<void> insertNote(Note note) async {
final db = await database;
await db.insert('notes', note.toMap(),
conflictAlgorithm: ConflictAlgorithm.replace);
}
static Future<List<Note>> getNotes({String? bookId}) async {
final db = await database;
List<Map<String, dynamic>> maps;
if (bookId != null) {
maps = await db.query('notes',
where: 'bookId = ?', whereArgs: [bookId], orderBy: 'createdAt DESC');
} else {
maps = await db.query('notes', orderBy: 'createdAt DESC');
}
return maps.map((m) => Note.fromMap(m)).toList();
}
5.3 进度更新实现
void _updateProgress() {
final page = int.tryParse(_pageController.text);
if (page == null || page < 0 || page > _book.totalPages) {
ScaffoldMessenger.of(context).showSnackBar(
const SnackBar(content: Text('请输入有效页码')),
);
return;
}
BookStatus newStatus = _book.status;
if (page >= _book.totalPages) {
newStatus = BookStatus.completed;
}
setState(() {
_book = _book.copyWith(
currentPage: page,
status: newStatus,
finishDate: newStatus == BookStatus.completed ? DateTime.now() : null,
);
});
widget.onUpdate(_book);
}
5.4 笔记分享实现
void _shareNote(Note note) {
Share.share('${note.bookTitle}\n\n${note.content}');
}
六、交互设计
6.1 添加书籍流程
6.2 添加笔记流程
6.3 阅读进度更新流程
七、扩展功能规划
7.1 后续版本规划
7.2 功能扩展建议
7.2.1 高级笔记功能
笔记功能:
- 笔记标签系统
- 笔记搜索功能
- 笔记导出PDF
- 笔记关联推荐
7.2.2 阅读分析功能
阅读分析:
- 阅读时长统计
- 阅读速度分析
- 阅读习惯洞察
- 年度阅读报告
7.2.3 社交分享功能
社交功能:
- 笔记分享到社交平台
- 书评撰写发布
- 读书小组讨论
- 好友阅读动态
八、注意事项
8.1 开发注意事项
-
数据库操作:使用异步操作,避免阻塞UI线程
-
数据关联:删除书籍时同步删除相关笔记
-
进度计算:注意页码边界值处理
-
状态转换:正确处理书籍状态转换逻辑
-
性能优化:大量书籍时使用分页加载
8.2 常见问题
| 问题 | 原因 | 解决方案 |
|---|---|---|
| 书籍添加失败 | 书名为空 | 添加必填验证 |
| 进度更新错误 | 页码超出范围 | 添加范围检查 |
| 笔记保存失败 | 内容为空 | 添加内容验证 |
| 状态不更新 | 进度达到100% | 自动更新状态 |
| 分享失败 | 权限未申请 | 检查分享权限 |
8.3 使用技巧
📚 读书笔记使用技巧 📚
书籍管理技巧
- 及时更新阅读进度
- 合理设置阅读状态
- 定期整理书架
- 善用搜索功能
笔记记录技巧
- 分类记录不同类型笔记
- 标注页码方便查找
- 写下阅读感想
- 定期回顾笔记
阅读习惯养成
- 设置阅读提醒
- 保持每日阅读
- 记录阅读心得
- 分享精彩内容
九、运行说明
9.1 环境要求
| 环境 | 版本要求 |
|---|---|
| Flutter SDK | >= 3.0.0 |
| Dart SDK | >= 2.17.0 |
| 鸿蒙OS | API 21+ |
| Android | API 21+ |
| Web浏览器 | Chrome 90+ |
9.2 依赖配置
在 pubspec.yaml 中添加以下依赖:
dependencies:
flutter:
sdk: flutter
shared_preferences: ^2.5.3
share_plus: ^10.1.4
sqflite: ^2.4.1
path: ^1.9.0
9.3 运行命令
# 查看可用设备
flutter devices
# 运行到Web服务器
flutter run -d web-server -t lib/main_reading_notes.dart --web-port 8201
# 运行到鸿蒙设备
flutter run -d 127.0.0.1:5555 lib/main_reading_notes.dart
# 代码分析
flutter analyze lib/main_reading_notes.dart
十、总结
读书笔记应用是一款专为阅读爱好者设计的工具,支持记录读书笔记、书籍管理、阅读进度跟踪,以及笔记导出分享。应用采用 Material Design 3 设计规范,以温暖的棕色为主色调,营造书香气息。
核心功能涵盖书籍管理、阅读进度、笔记记录、笔记分享、书籍封面、阅读提醒、书籍搜索、阅读统计八大模块。用户可以轻松管理个人书单、记录阅读感悟、追踪阅读进度,让阅读更有价值。
应用支持4种书籍状态(在读、已读、想读、弃读)和4种笔记类型(摘抄、感想、总结、疑问),使用SQLite数据库持久化存储,支持笔记分享和阅读提醒。通过本应用,希望能够帮助用户养成良好的阅读习惯,让阅读成为生活的一部分。
读书笔记——让阅读更有价值
更多推荐
所有评论(0)