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 版本(影响最终选型)

Activity

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

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