flutter架 构项目基础

This commit is contained in:
崔宝新
2026-09-04 15:22:20 +08:00
parent 70967229d0
commit 0c5aee59c0
265 changed files with 35484 additions and 0 deletions
+40
View File
@@ -0,0 +1,40 @@
# Debug Session: avatar-orientation
- **Status**: [OPEN]
- **Issue**: 手机拍照后上传头像,期望经过 EXIF 方向修正后始终正向显示;实际上传成功后仍保持拍照时的方向,未自动转正。
- **Debug Server**: http://127.0.0.1:7777/event (Android 通过 `adb reverse tcp:7777 tcp:7777` 回传)
- **Log File**: .dbg/trae-debug-log-avatar-orientation.ndjson
## Reproduction Steps
1. Android 真机打开 App。
2. 进入“我的”页,点击头像。
3. 选择“拍照”,使用横屏/竖屏拍摄一张照片并确认。
4. 等待上传成功,观察最终头像是否已经转正。
## Hypotheses & Verification
| ID | Hypothesis | Likelihood | Effort | Evidence |
|----|------------|------------|--------|----------|
| A | 拍照返回的字节已被系统或插件提前烘焙,EXIF orientation 不存在或恒为 1,所以 `bakeOrientation` 无事可做 | High | Low | Confirmed |
| B | `originBytes` 读取到的不是原始照片数据,丢失了 EXIF;而 `originFile/file` 路径上的文件与之不同 | High | Medium | Confirmed |
| C | 图片确实已旋正上传,但显示层仍在展示未处理的本地预览或缓存图 | Medium | Low | Rejected |
| D | `image` 包已读到 EXIF,但在当前手机样本上 `bakeOrientation` 前后宽高/方向无变化,问题出在更早的相机输出阶段 | Medium | Medium | Pending |
| E | OSS / CDN 返回的是旧缓存图,导致看到的仍是原方向 | Low | Medium | Pending |
## Log Evidence
- `my_page.dart:_onAvatarTap:pick`:两次拍照都返回 `hasEntity=true`、`source=entity-originBytes`
- `my_page.dart:_onAvatarTap:upload`:两次都成功上传,分别得到新的 JPG URL,说明上传链路正常
- `my_page.dart:_onAvatarTap:preview-clear`:上传成功后 `_pickedAvatar` 已清空,页面不再优先显示本地临时预览
- `my_page.dart:_onAvatarTap:processor`:
- `hasExifOrientation=false`
- `exifOrientationBefore=null`
- `exifOrientationAfter=null`
- `decodedWidth=2160, decodedHeight=3840`
- `orientedWidth=2160, orientedHeight=3840`
- `resized=true`
说明进入处理链的字节已经**没有 EXIF orientation**,`bakeOrientation` 前后没有任何方向变化空间
## Verification Conclusion
- 已确认上传成功且显示层已切回服务器图,**C 被排除**
- 根因已锁定:
- A:相机输出最终交给业务层的字节本身已无 EXIF orientation
- B:`wechat_camera_picker` 默认保存为 `AssetEntity` 后,再走 `entity-originBytes` 会丢失最初拍照文件里的方向信息
- D:`bakeOrientation` 前后没有任何变化,是因为输入里已经没有可烘焙的 orientation