读书笔记应用


欢迎加入开源鸿蒙跨平台社区:
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 整体架构图

Data Layer

Business Layer

Presentation Layer

主页面
HomePage

书架管理

笔记记录

阅读统计

设置中心

书籍列表

阅读进度

书籍详情

笔记列表

添加笔记

分享笔记

阅读总览

状态分布

笔记统计

数据库管理器
DatabaseHelper

书籍管理
BookManager

笔记管理
NoteManager

SQLite数据库

Book模型

Note模型

2.2 类图设计

has

has

belongs to

manages

manages

ReadingNotesApp

+Widget build()

«enumeration»

BookStatus

+String label

+String emoji

+Color color

+reading()

+completed()

+wishlist()

+abandoned()

«enumeration»

NoteType

+String label

+String emoji

+Color color

+quote()

+thought()

+summary()

+question()

Book

+String id

+String title

+String author

+String cover

+int totalPages

+int currentPage

+BookStatus status

+DateTime addedDate

+DateTime startDate

+DateTime finishDate

+double rating

+double progress

+toMap()

+fromMap()

Note

+String id

+String bookId

+String bookTitle

+NoteType type

+String content

+int pageNumber

+String chapter

+DateTime createdAt

+toMap()

+fromMap()

DatabaseHelper

-Database _database

+get database

+insertBook()

+getBooks()

+updateBook()

+deleteBook()

+insertNote()

+getNotes()

+deleteNote()

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 阅读状态分布示例
56% 30% 11% 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 主页面布局

HomePage

IndexedStack

书架页面

笔记页面

统计页面

设置页面

NavigationBar

书架 Tab

笔记 Tab

统计 Tab

设置 Tab

3.3.2 书架页面结构

书架页面

AppBar

阅读进度卡片

书籍网格

添加书籍按钮

正在阅读数量

进度条显示

书籍卡片

封面区域

书籍信息

阅读进度

3.3.3 书籍详情结构

书籍详情

顶部信息区

进度更新区

添加笔记区

笔记列表区

书名作者

阅读状态

进度条

笔记类型选择

内容输入

页码章节

3.4 笔记分享逻辑

微信

QQ

复制

其他

点击分享笔记

获取笔记内容

格式化分享文本

调用Share.share

选择分享方式

分享到微信

分享到QQ

复制到剪贴板

其他应用


四、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 后续版本规划

2024-01-07 2024-01-14 2024-01-21 2024-01-28 2024-02-04 2024-02-11 2024-02-18 2024-02-25 2024-03-03 2024-03-10 基础UI框架 书籍管理 笔记记录 进度追踪 笔记分享 阅读提醒 书籍封面 数据备份 云端同步 V1.0 基础版本 V1.1 增强版本 V1.2 进阶版本 读书笔记开发计划

7.2 功能扩展建议

7.2.1 高级笔记功能

笔记功能:

  • 笔记标签系统
  • 笔记搜索功能
  • 笔记导出PDF
  • 笔记关联推荐
7.2.2 阅读分析功能

阅读分析:

  • 阅读时长统计
  • 阅读速度分析
  • 阅读习惯洞察
  • 年度阅读报告
7.2.3 社交分享功能

社交功能:

  • 笔记分享到社交平台
  • 书评撰写发布
  • 读书小组讨论
  • 好友阅读动态

八、注意事项

8.1 开发注意事项

  1. 数据库操作:使用异步操作,避免阻塞UI线程

  2. 数据关联:删除书籍时同步删除相关笔记

  3. 进度计算:注意页码边界值处理

  4. 状态转换:正确处理书籍状态转换逻辑

  5. 性能优化:大量书籍时使用分页加载

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数据库持久化存储,支持笔记分享和阅读提醒。通过本应用,希望能够帮助用户养成良好的阅读习惯,让阅读成为生活的一部分。

读书笔记——让阅读更有价值


Logo

腾讯云面向开发者汇聚海量精品云计算使用和开发经验,营造开放的云计算技术生态圈。

更多推荐