396 lines
13 KiB
Markdown
396 lines
13 KiB
Markdown
# CLAUDE.md
|
||
|
||
This file provides guidance to Claude Code (claude.ai/code) when working with code in this repository.
|
||
|
||
## 项目概览
|
||
|
||
**项目名称**:想拍 (InspoSnap)
|
||
**项目描述**:Shoot What Inspires You - 拍摄灵感收集与管理应用
|
||
**当前阶段**:MVP v1.1 开发中
|
||
**技术栈**:Flutter + Riverpod + Hive
|
||
**参考文档**:[snapwish_PRD_v1.1.md](snapwish_PRD_v1.1.md) - 已确认的产品需求文档
|
||
|
||
## 技术方案
|
||
|
||
### 核心技术选型
|
||
- **框架**:Flutter 3.2.5+ (Dart)
|
||
- **状态管理**:Riverpod (现代、类型安全)
|
||
- **数据库**:Hive (轻量级、高性能)
|
||
- **图片处理**:flutter_image_compress + image
|
||
- **瀑布流**:flutter_staggered_grid_view
|
||
- **国际化**:flutter_localizations
|
||
- **分享接收**:receive_sharing_intent
|
||
- **图片查看**:photo_view
|
||
- **UI组件**:Material Design + 自定义主题
|
||
|
||
### 架构设计
|
||
```
|
||
lib/
|
||
├── core/ # 核心功能
|
||
│ ├── constants/ # 常量定义
|
||
│ ├── errors/ # 错误处理
|
||
│ ├── utils/ # 工具类(图片压缩、文件操作)
|
||
│ └── theme/ # 主题配置
|
||
├── data/ # 数据层
|
||
│ ├── datasources/ # 数据源
|
||
│ │ ├── local/ # Hive数据库
|
||
│ │ └── share/ # 分享接收
|
||
│ ├── models/ # 数据模型
|
||
│ └── repositories/ # 数据仓库
|
||
├── domain/ # 业务逻辑层
|
||
│ ├── entities/ # 实体类
|
||
│ ├── repositories/ # 仓库接口
|
||
│ └── usecases/ # 用例
|
||
├── presentation/ # 表示层
|
||
│ ├── providers/ # Riverpod状态管理
|
||
│ ├── pages/ # 页面
|
||
│ ├── widgets/ # 组件
|
||
│ └── l10n/ # 国际化
|
||
└── main.dart # 应用入口
|
||
```
|
||
|
||
## 开发命令
|
||
|
||
```bash
|
||
# 安装依赖
|
||
flutter pub get
|
||
|
||
# 运行应用
|
||
flutter run # 默认设备
|
||
flutter run -d android # Android设备
|
||
flutter run -d ios # iOS设备
|
||
|
||
# 代码分析
|
||
flutter analyze
|
||
|
||
# 运行测试
|
||
flutter test
|
||
|
||
# 构建发布
|
||
flutter build apk # Android APK
|
||
flutter build ios # iOS应用
|
||
flutter build web # Web版本
|
||
|
||
# 清理缓存
|
||
flutter clean
|
||
```
|
||
|
||
## 技术规范
|
||
|
||
### 图片处理规范
|
||
- **缩略图**:长边500px,WebP格式,85%质量,保持原始比例
|
||
- **大GIF处理**:提取前几帧作为缩略图,避免内存溢出
|
||
- **存储路径**:按保存日期分类 `/yyyy/MM/dd/`
|
||
- **缓存策略**:30天/500MB自动清理
|
||
|
||
### 性能指标
|
||
- **冷启动时间**:< 2秒
|
||
- **图片加载空窗期**:< 200ms
|
||
- **搜索响应时间**:< 500ms
|
||
- **内存占用**:< 200MB(正常使用)
|
||
- **用户操作响应**:< 200ms
|
||
|
||
### UI/UX规范
|
||
- **响应式断点**:手机≤600dp(2列),平板>600dp(3-4列)
|
||
- **图片间距**:8dp标准间距
|
||
- **动画时长**:页面转场300ms
|
||
- **加载体验**:骨架屏 + 进度提示
|
||
|
||
## 开发任务分解
|
||
|
||
### 📋 任务清单(模块化开发)
|
||
|
||
#### 🔧 Phase 1: 架构搭建(3-4天)
|
||
**任务1.1: 项目基础配置**
|
||
- [ ] 创建Flutter项目并配置基础依赖
|
||
- [ ] 配置国际化支持(简中/繁中/English)
|
||
- [ ] 设置主题系统(浅色/深色/跟随系统)
|
||
- [ ] 配置Material Design和自定义色彩方案
|
||
|
||
**任务1.2: 数据层架构** ✅
|
||
- [x] 配置Hive数据库和实体模型
|
||
- [x] 实现数据访问对象(DAO)模式
|
||
- [x] 创建基础Repository接口和实现
|
||
- [x] 设置数据迁移和版本管理
|
||
|
||
**验收状态**:
|
||
- ✅ Hive数据库配置完成,适配器生成成功
|
||
- ✅ 实体模型定义完整(图片、文件夹、标签)
|
||
- ✅ DAO模式实现正确(ImageDAO、FolderDAO、TagDAO)
|
||
- ✅ Repository接口设计合理,支持CRUD操作
|
||
- ✅ 数据迁移机制配置完成,支持版本管理
|
||
- ⚠️ 代码质量:26个`avoid_print`提示,无致命错误
|
||
|
||
**任务1.3: 核心工具类** ✅
|
||
- [x] 图片压缩工具类(长边500px + WebP)
|
||
- [x] 文件存储管理工具
|
||
- [x] UUID生成和路径管理
|
||
- [x] 错误处理和日志系统
|
||
|
||
**验收状态**:
|
||
- ✅ 图片压缩工具类:支持JPG/PNG/GIF/WebP/HEIC格式,长边500px,WebP格式,GIF帧提取防内存溢出
|
||
- ✅ 文件存储管理:日期分类存储(/yyyy/MM/dd/),完整的文件和目录操作
|
||
- ✅ UUID和路径管理:多种UUID生成,路径安全检查,链式路径构建器
|
||
- ✅ 日志系统:5级日志(debug/info/warning/error/fatal),替换所有print语句
|
||
|
||
**任务1.4: 基础UI组件** ✅
|
||
- [x] 创建可复用的按钮组件
|
||
- [x] 实现加载状态组件(骨架屏)
|
||
- [x] 空状态页面组件
|
||
- [x] 错误提示组件
|
||
|
||
**验收状态**:
|
||
- ✅ 可复用按钮组件:支持主要、次要、文本、轮廓、危险按钮类型,多种尺寸,加载状态,图标支持
|
||
- ✅ 加载状态组件:骨架屏动画、圆形加载器、进度条、全屏加载、列表/网格骨架屏
|
||
- ✅ 空状态页面组件:多种预设场景(无数据、无搜索结果、网络错误等),自定义图标和操作
|
||
- ✅ 错误提示组件:多种错误类型(网络、服务器、权限、数据等),详细错误信息显示
|
||
|
||
#### 📤 Phase 2: 分享功能(2-3天)
|
||
**任务2.1: 分享接收机制** ✅
|
||
- [x] 配置receive_sharing_intent插件
|
||
- [x] 实现Android分享接收配置
|
||
- [x] 实现iOS分享接收配置(已添加TODO注释,跳过iOS设备)
|
||
- [x] 处理多张图片接收逻辑(支持批量处理和队列管理)
|
||
|
||
**任务2.2: 保存界面UI**
|
||
- [ ] 创建半透明模态框界面
|
||
- [ ] 实现图片网格预览组件
|
||
- [ ] 构建文件夹选择器弹窗
|
||
- [ ] 实现标签输入和选择组件
|
||
|
||
**任务2.3: 保存业务逻辑**
|
||
- [ ] 实现批量保存模式(默认)
|
||
- [ ] 实现单张编辑模式切换
|
||
- [ ] 处理保存进度提示
|
||
- [ ] 异步保存和缩略图生成
|
||
|
||
**任务2.4: 文件夹管理**
|
||
- [ ] 创建文件夹弹窗界面
|
||
- [ ] 实现Material Icons选择器
|
||
- [ ] 文件夹排序(最近使用)
|
||
- [ ] 文件夹CRUD操作
|
||
|
||
#### 🖼️ Phase 3: 图库展示(2-3天)
|
||
**任务3.1: 主图库界面**
|
||
- [ ] 实现瀑布流布局(flutter_staggered_grid_view)
|
||
- [ ] 响应式列数切换(手机2列/平板3-4列)
|
||
- [ ] 图片懒加载和缓存优化
|
||
- [ ] 下拉刷新和上拉加载更多
|
||
|
||
**任务3.2: 搜索功能**
|
||
- [ ] 实现常驻搜索框
|
||
- [ ] 模糊搜索算法(文件夹+标签+备注)
|
||
- [ ] 搜索历史记录(最近10条)
|
||
- [ ] 空搜索结果页面
|
||
|
||
**任务3.3: 状态管理**
|
||
- [ ] 图库状态管理(Riverpod)
|
||
- [ ] 图片加载状态管理
|
||
- [ ] 搜索状态管理
|
||
- [ ] 分页数据管理
|
||
|
||
#### 📁 Phase 4: 管理功能(3-4天)
|
||
**任务4.1: 图片详情页**
|
||
- [ ] 图片查看器(photo_view)
|
||
- [ ] 左右滑动切换(非循环)
|
||
- [ ] 双击放大/缩小功能
|
||
- [ ] 横竖屏适配
|
||
|
||
**任务4.2: 详情信息展示**
|
||
- [ ] 显示文件夹、标签、备注信息
|
||
- [ ] 编辑功能入口
|
||
- [ ] 删除功能(二次确认)
|
||
- [ ] 导出到系统相册
|
||
|
||
**任务4.3: 标签管理系统**
|
||
- [ ] 标签列表页面
|
||
- [ ] 标签编辑功能
|
||
- [ ] Material Icons选择
|
||
- [ ] 标签使用统计
|
||
|
||
**任务4.4: 文件夹页面**
|
||
- [ ] 文件夹网格展示
|
||
- [ ] 文件夹封面设置
|
||
- [ ] 文件夹重命名功能
|
||
- [ ] 文件夹删除处理
|
||
|
||
#### ⚙️ Phase 5: 搜索设置(2-3天)
|
||
**任务5.1: 设置页面**
|
||
- [ ] 设置页面分组布局
|
||
- [ ] 语言切换功能
|
||
- [ ] 主题模式切换
|
||
- [ ] 网格布局切换
|
||
|
||
**任务5.2: 存储管理**
|
||
- [ ] 存储使用情况显示
|
||
- [ ] 一键清理缓存功能
|
||
- [ ] 缩略图管理
|
||
- [ ] 存储路径管理
|
||
|
||
**任务5.3: 性能优化**
|
||
- [ ] 虚拟滚动实现
|
||
- [ ] 内存管理优化
|
||
- [ ] 大图片处理优化
|
||
- [ ] 启动速度优化
|
||
|
||
**任务5.4: 最终调试**
|
||
- [ ] 完整功能测试
|
||
- [ ] 性能测试和调优
|
||
- [ ] 多设备兼容性测试
|
||
- [ ] Bug修复和完善
|
||
|
||
## 数据模型定义
|
||
|
||
### 核心实体类
|
||
```dart
|
||
// 图片实体
|
||
class InspirationImage {
|
||
final String id; // UUID
|
||
final String filePath; // 原图路径
|
||
final String thumbnailPath; // 缩略图路径
|
||
final String? folderId; // 文件夹ID
|
||
final List<String> tags; // 标签ID列表
|
||
final String? note; // 备注内容
|
||
final DateTime createdAt; // 创建时间(保存时间)
|
||
final DateTime updatedAt; // 更新时间
|
||
final String? originalName; // 原始文件名
|
||
final int fileSize; // 文件大小
|
||
final String mimeType; // MIME类型
|
||
final int? width; // 图片宽度
|
||
final int? height; // 图片高度
|
||
final bool isFavorite; // 是否收藏
|
||
}
|
||
|
||
// 文件夹实体
|
||
class ImageFolder {
|
||
final String id; // UUID
|
||
final String name; // 文件夹名称
|
||
final String? coverImageId; // 封面图片ID
|
||
final String icon; // Material Icons名称
|
||
final DateTime createdAt; // 创建时间
|
||
final DateTime updatedAt; // 更新时间
|
||
final DateTime lastUsedAt; // 最近使用时间
|
||
}
|
||
|
||
// 标签实体
|
||
class ImageTag {
|
||
final String id; // UUID
|
||
final String name; // 标签名称
|
||
final String icon; // Material Icons名称
|
||
final String color; // 十六进制颜色
|
||
final int usageCount; // 使用次数
|
||
final DateTime lastUsedAt; // 最近使用时间
|
||
}
|
||
```
|
||
|
||
## 开发注意事项
|
||
|
||
### 代码规范
|
||
- 遵循Dart官方代码风格指南
|
||
- 使用有意义的变量和函数命名
|
||
- 添加必要的代码注释
|
||
- 保持widget的纯净性,业务逻辑分离到provider
|
||
|
||
### 性能要求
|
||
- 冷启动时间 < 2秒
|
||
- 图片加载流畅,无卡顿
|
||
- 用户操作响应 < 200ms
|
||
- 内存占用 < 200MB
|
||
|
||
### 错误处理
|
||
- 分享失败:"出了点小问题,请重新分享试试~"
|
||
- 保存失败:同上
|
||
- 存储空间不足:同上
|
||
- 所有错误都需要友好提示
|
||
|
||
### 兼容性要求
|
||
- Android 7.0+ (API 24+)
|
||
- iOS 12.0+
|
||
- 适配各种屏幕尺寸和分辨率
|
||
|
||
## 当前开发任务
|
||
|
||
### 🎯 当前阶段:Phase 1.2 - 数据层架构搭建
|
||
**预计时间:1天**
|
||
**优先级:高**
|
||
|
||
**具体任务**:
|
||
- [ ] 配置Hive数据库和实体模型
|
||
- [ ] 实现数据访问对象(DAO)模式
|
||
- [ ] 创建基础Repository接口和实现
|
||
- [ ] 设置数据迁移和版本管理
|
||
|
||
**已完成任务**:Phase 1.1 - 项目基础配置
|
||
**下一个任务**:Phase 1.3 - 核心工具类
|
||
|
||
**开发顺序**:严格按照任务编号顺序执行,每个任务完成后再进行下一个任务。
|
||
|
||
**代码提交**:每个任务完成后提交一次,确保版本控制清晰。
|
||
|
||
## 代码规范要求
|
||
|
||
### 注释规范(强制要求)
|
||
**所有代码文件必须包含中文注释**,具体要求:
|
||
- **实体类**:每个字段必须有中文注释,说明字段用途和业务含义
|
||
- **方法**:每个公共方法必须有中文注释,说明方法功能、参数含义、返回值
|
||
- **类**:每个类必须有中文注释,说明类的职责和设计目的
|
||
- **复杂逻辑**:算法或业务逻辑复杂的地方必须有详细中文注释
|
||
- **常量**:所有常量必须有中文注释,说明常量用途
|
||
- **数据库相关**:所有数据库模型、DAO、Repository必须有详细中文注释
|
||
|
||
**注释模板示例**:
|
||
```dart
|
||
/// 用户服务类 - 负责用户相关的业务逻辑处理
|
||
/// 提供用户注册、登录、信息修改等功能
|
||
class UserService {
|
||
/// 用户唯一标识符 - UUID格式,全局唯一
|
||
final String id;
|
||
|
||
/// 用户昵称 - 显示名称,支持2-20个字符
|
||
final String nickname;
|
||
|
||
/// 构造函数 - 创建用户实例
|
||
/// [id] 用户唯一标识符,不能为空
|
||
/// [nickname] 用户昵称,不能为空
|
||
UserService({required this.id, required this.nickname});
|
||
|
||
/// 更新用户昵称 - 修改用户显示名称
|
||
/// 返回更新后的用户实例,保持不可变性
|
||
UserService updateNickname(String newNickname) {
|
||
return UserService(id: id, nickname: newNickname);
|
||
}
|
||
}
|
||
```
|
||
|
||
---
|
||
|
||
**最后更新**:2025年9月12日
|
||
**开发状态**:Phase 1.2 进行中
|
||
**下一阶段**:数据层架构搭建...
|
||
|
||
**记住:功能优先,保持代码整洁,及时沟通!** 🚀
|
||
|
||
**重要提醒:所有代码必须包含中文注释,遵循注释规范!** 📋
|
||
|
||
## 开发进度跟踪
|
||
|
||
### 📊 总体进度
|
||
- [x] Phase 1.1: 项目基础配置(5/5)✅
|
||
- [x] Phase 1.2: 数据层架构搭建(4/4)✅
|
||
- [x] Phase 1.3: 核心工具类(4/4)✅
|
||
- [x] Phase 1.4: 基础UI组件(4/4)✅
|
||
- [x] Phase 2.1: 分享接收机制(4/4)✅
|
||
- [ ] Phase 2.2: 保存界面UI(0/4)
|
||
|
||
### 🎯 当前任务详情
|
||
**任务编号**:2.2
|
||
**任务名称**:保存界面UI
|
||
**任务状态**:待开始
|
||
**预计完成**:2025年9月19日
|
||
**依赖项**:Phase 2.1 完成
|
||
|
||
**任务验收标准**:
|
||
- 半透明模态框界面创建完成
|
||
- 图片网格预览组件实现
|
||
- 文件夹选择器弹窗完成
|
||
- 标签输入和选择组件实现 |