Skip to content

头像两个问题:电脑端上传后回退默认头像;手机端相册照片不全 #12

Description

@AzarAI-TOP

问题 1:电脑端头像上传后,又莫名其妙变成默认头像

复现步骤

  1. Windows 端(v1.1.1)在"我的"页设置头像,显示正常
  2. 不做任何操作,几分钟内(60s 轮询间隔)或下次启动后,头像变回默认

期望 / 实际

  • 期望:设置后一直保持,直至手动移除
  • 实际:头像被静默清除,回退为默认头像

相关代码

  • lib/core/sync/sync_table_registry.dart:90-95:user_settings 的 applyRemote 把所有不是 Storage 对象路径<uuid>/avatar.ext)的 avatar_path 值当作"已移除",直接删除本地 avatar_local_pathavatar_path
if (value == null || !AvatarSync.isStoragePath(value)) {
  await SettingsRepository.delete(avatar_local_path);
  await SettingsRepository.delete(avatar_path);
  return;
}
  • v1.1.0 旧客户端的 pushUserSettingsgit show 7e039be:lib/core/sync/sync_service.dart:190-202)会把设备本地文件路径(如 C:\Users\...\avatar.jpg)原样推上云。
  • v1.1.1 的 pushUserSettingssync_service.dart:261)已带"旧路径→上传 Storage"的迁移逻辑,但它不在启动时调用(仅 app_provider.dart:160/537 和上传成功后调用),云上遗留的旧路径行不会被自愈。

可能原因

升级/多端混跑场景的必现链路:v1.1.0 时代的设备(升级前的 Windows 本体、仍装旧 APK 的手机)往云 user_settings.avatar_path 推过本机路径;v1.1.1 设备每 60s 拉取时,把该行判为非法并清除本地头像——上传成功后也会被同一行反复打回默认。

建议方案

  1. applyRemote 遇到非 Storage 路径值时应忽略并保留本地头像(旧本机路径对别的设备无意义但无害),仅在云端 DELETE 事件(applyDelete)或显式移除时才清除
  2. 启动 pull 后调用一次 pushUserSettings:若本地 avatar_path 仍是旧本机路径且文件存在,自动上传 Storage 并推送对象路径,完成自愈
  3. 确认手机已升级 v1.1.1(旧 APK 会持续把本机路径推回云端)

问题 2:手机端头像选择界面,照片不全

复现步骤

  1. 手机端"我的"→ 头像 → 从相册选择
  2. 弹出的照片选择器里只显示部分照片,找不到相册里其他的图

期望 / 实际

  • 期望:能看到相册全部照片/全部相册目录
  • 实际:只有最近照片或部分目录

相关代码 / 环境

  • lib/features/me/me_screen.dart:475ImagePicker().pickImage(source: ImageSource.gallery, ...)
  • pubspec.yaml:40image_picker: ^1.1.2(image_picker_android 在 Android 13+ 默认走系统 Photo Picker,无需存储权限)
  • android/app/src/main/AndroidManifest.xml:仅声明 INTERNET,无 READ_MEDIA_IMAGES/READ_EXTERNAL_STORAGE

可能原因

大概率不是缺运行时权限,而是 Android 13+ Photo Picker 的视图限制:默认只展示"最近"照片,云端照片(如 Google 相册未下载到本机的)与部分目录不显示;部分 OEM ROM 行为更受限。Android 12 及以下走 ACTION_GET_CONTENT,一般不受影响。

建议方案(按优先级)

  1. 首选:插件级改用传统选择器——ImagePickerAndroid.useAndroidPhotoPicker = false(走 ACTION_GET_CONTENT 完整目录树,无需任何权限)
  2. 若保留 Photo Picker:在设置页引导用户点"相册/浏览"进入完整视图
  3. 仅当目标机 ≤12 且传统选择器仍显示不全时,才补 READ_MEDIA_IMAGES(13+)/READ_EXTERNAL_STORAGE(≤12)

需要补充的环境信息

手机品牌 / Android 版本(影响最终选型)

Metadata

Metadata

Assignees

No one assigned

    Labels

    bugSomething isn't working

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions