主要功能: - ✅ 完成Book模型(电子书基本信息管理) - ✅ 完成Highlight模型(文本高亮功能) - ✅ 建立Flutter数据模型设计标准 技术特点: - 采用不可变对象设计模式 - 实现完整的序列化支持(toMap/fromMap) - 提供便利的工厂构造函数 - 正确处理枚举类型序列化 - 完善的空值安全处理 学习文档: - 📚 项目结构与环境配置指南 - 🎯 数据模型设计思路分析 - 💡 Flutter数据模型最佳实践 下一步: - 实现Annotation批注模型 - 设计本地存储方案 - 开始UI组件开发 🤖 Generated with [Claude Code](https://claude.com/claude-code) Co-Authored-By: Claude <noreply@anthropic.com>
76 lines
2.4 KiB
Markdown
76 lines
2.4 KiB
Markdown
# Flutter 数据模型设计学习笔记
|
||
|
||
## 一、数据模型设计的重要性
|
||
在Flutter应用开发中,数据模型是整个应用的"地基":
|
||
- **决定UI结构**:数据结构直接影响界面显示方式
|
||
- **影响状态管理**:数据复杂度决定了状态管理方案的选型
|
||
- **指导存储设计**:数据结构决定了如何进行本地存储和网络传输
|
||
|
||
## 二、Flutter数据模型设计原则
|
||
|
||
### 1. 不可变性原则(Immutability)
|
||
**为什么需要不可变性?**
|
||
- Flutter的Widget重建机制基于状态比较
|
||
- 不可变对象更容易进行状态比较和更新检测
|
||
- 避免"意外修改"导致的bug
|
||
|
||
**实现方式:**
|
||
- 所有字段使用`final`修饰
|
||
- 提供`copyWith()`方法创建新对象
|
||
- 不要提供修改字段的方法
|
||
|
||
### 2. 序列化支持
|
||
**为什么需要序列化?**
|
||
- 本地存储需要将对象转换为可存储格式
|
||
- 网络传输需要JSON格式
|
||
- 状态管理工具需要状态保存功能
|
||
|
||
**必需方法:**
|
||
- `toMap()` - 将对象转换为Map
|
||
- `fromMap()` - 从Map创建对象
|
||
|
||
### 3. 空值安全
|
||
**实践原则:**
|
||
- 引用类型字段要有默认空值(如空列表、空Map)
|
||
- 使用`?`表示可为null的字段
|
||
- 构造函数中使用required标记必需字段
|
||
|
||
## 三、电子书阅读器核心实体分析
|
||
|
||
### 核心需求分析:
|
||
1. **支持导入epub、mobi、txt文件** → 需要Book模型
|
||
2. **划线(不同颜色)** → 需要Highlight模型
|
||
3. **批注** → 需要Annotation模型
|
||
4. **书签** → 需要Bookmark模型
|
||
5. **书架管理** → 需要Bookshelf模型
|
||
6. **阅读进度** → 需要ReadingProgress模型
|
||
|
||
### 实体关系:
|
||
- 一个书架包含多本书
|
||
- 一本书属于多个书架
|
||
- 一本书有多个章节、批注、高亮、书签
|
||
- 一本书有一个阅读进度
|
||
|
||
## 四、学习步骤
|
||
|
||
### 第一步:创建Book模型(最核心的实体)
|
||
包含字段:
|
||
- 基本信息:id, title, author, publisher
|
||
- 文件信息:filePath, format, fileSize
|
||
- 阅读信息:status, addedDate, totalPages
|
||
- 扩展信息:tags, rating, description
|
||
|
||
### 第二步:创建书架相关模型
|
||
- Bookshelf:书架信息
|
||
- BookshelfBook:书架与书籍的关联
|
||
|
||
### 第三步:创建阅读相关模型
|
||
- ReadingProgress:阅读进度
|
||
- Annotation:批注
|
||
- Highlight:高亮
|
||
- Bookmark:书签
|
||
|
||
### 第四步:学习本地存储方案
|
||
- 选择Hive数据库
|
||
- 实现Repository模式
|
||
- 配置数据持久化 |