snap_wish/CLAUDE.md
2025-09-17 13:32:25 +08:00

396 lines
13 KiB
Markdown
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

# 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
```
## 技术规范
### 图片处理规范
- **缩略图**长边500pxWebP格式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格式长边500pxWebP格式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 - 核心工具类
**开发顺序**严格按照任务编号顺序执行每个任务完成后再进行下一个任务
**代码提交**每个任务完成后提交一次确保版本控制清晰
## 代码规范要求
### 注释规范(强制要求)
**所有代码文件必须包含中文注释**具体要求
- **实体类**每个字段必须有中文注释说明字段用途和业务含义
- **方法**每个公共方法必须有中文注释说明方法功能参数含义返回值
- ****每个类必须有中文注释说明类的职责和设计目的
- **复杂逻辑**算法或业务逻辑复杂的地方必须有详细中文注释
- **常量**所有常量必须有中文注释说明常量用途
- **数据库相关**所有数据库模型DAORepository必须有详细中文注释
**注释模板示例**
```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: 保存界面UI0/4
### 🎯 当前任务详情
**任务编号**2.2
**任务名称**保存界面UI
**任务状态**待开始
**预计完成**2025年9月19日
**依赖项**Phase 2.1 完成
**任务验收标准**
- 半透明模态框界面创建完成
- 图片网格预览组件实现
- 文件夹选择器弹窗完成
- 标签输入和选择组件实现