# 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模式 - 配置数据持久化