新增:宠物头像接线——铅笔角标接上传、列表与详情展示真实头像(T3.5-09)
- `Pet.avatarUrl` 入模型;列表卡与详情头像改用真实预签名 URL(无图仍回退 爪印占位——服务端对非 ready 的 asset 直接给 null,客户端只有一种占位)。 - 详情页铅笔角标自此有功能:接 `MediaUploader`(purpose=pet_avatar);已有 头像时先给「更换 / 移除」二选一,移除即三态显式 null。 - 权限按 **WRITE 档**呈现(ADR-022 D3.5-3:owner + caregiver 可改头像, viewer 无入口),与资料编辑的 MANAGE 档刻意不同。因此纯头像 PATCH 只发 `version` + `avatarAssetId`,**不夹带任何资料字段**——夹带会让服务端按更严 的一半定档,caregiver 立刻 403。 - `UpdatePetRequest.avatarAssetId` 是该 schema 唯一的三态字段,其余字段保持 M2 两态语义(它们的 CHECK 约束本就不允许空值,「清空」无意义)。 - 40902 冲突后重取档案让用户自行决定重来,不静默重放(头像是用户可见的 覆盖操作,不该自动生效两次)。 测试 588 → 597(+9)。 Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
This commit is contained in:
@@ -28,9 +28,12 @@ enum PetAvatarSize {
|
||||
/// 头像实现。圆形裁切 + 3px `surface` 白描边 + 轻投影(正典
|
||||
/// `.patbond-avatar` 规格),可选右下编辑徽标与品牌渐变环。
|
||||
///
|
||||
/// M2 首版不做头像上传(ADR-010 / D2-1 裁决),[url] 为 null 时渲染
|
||||
/// 本地占位形态(`surfaceTint` 底 + `Icons.pets`);有图时经
|
||||
/// [RemoteImage] 加载(loading / 失败兜底由其内置)。
|
||||
/// M2 首版不做头像上传(ADR-010 / D2-1 裁决);T3.5-09 起 [url] 由服务端
|
||||
/// `Pet.avatarUrl`(预签名 GET)驱动,[url] 为 null 时仍渲染本地占位形态
|
||||
/// (`surfaceTint` 底 + `Icons.pets`)——签一个必然 404 的 URL 比返回 null
|
||||
/// 更糟,故服务端对非 ready 的 asset 直接给 null,客户端只有一种占位逻辑。
|
||||
/// 有图时经 [RemoteImage] 加载(缓存 key 已剥签名参数;loading / 失败兜底
|
||||
/// 由其内置)。
|
||||
class PetAvatar extends StatelessWidget {
|
||||
const PetAvatar({
|
||||
required this.size,
|
||||
@@ -45,7 +48,7 @@ class PetAvatar extends StatelessWidget {
|
||||
|
||||
final PetAvatarSize size;
|
||||
|
||||
/// 头像图 URL;null 为本地占位形态(M2 默认)。
|
||||
/// 头像图 URL;null 为本地占位形态(无头像 / asset 非 ready / 存储未配置)。
|
||||
final String? url;
|
||||
|
||||
/// 可点击时整体 [InkWell] 圆形 ripple。
|
||||
|
||||
Reference in New Issue
Block a user