feat(mobile): UI-01 album cards, photo grid and full viewer

Co-Authored-By: Claude Code <noreply@anthropic.com>
This commit is contained in:
浅念
2026-09-21 15:55:44 +08:00
parent c94b9e5e58
commit f6929ae18f
17 changed files with 2750 additions and 702 deletions
+18 -1
View File
@@ -177,5 +177,22 @@
"uploadAction": "Upload",
"uploadEnqueuedCount": "Added {count} photo(s) to the upload queue",
"@uploadEnqueuedCount": { "placeholders": { "count": { "type": "int" } } },
"uploadPickNone": "No photos selected"
"uploadPickNone": "No photos selected",
"albumManagePhotos": "Manage photos",
"albumTakeFirstPhoto": "Take the first photo",
"albumUploadDisabledHint": "Uploads are off for this album. New photos cannot be added right now",
"albumRecentPhotos": "Recent uploads",
"photoFilterAll": "All",
"photoFilterFailed": "Failed",
"photosScopeOwnHint": "Collaborator view: only photos you uploaded are shown",
"photosEmptyFiltered": "No photos match this filter",
"photoHide": "Hide",
"photoUnhide": "Unhide",
"photoDeleteConfirmTitle": "Delete this photo?",
"photoDeleteConfirmBody": "The cloud photo will be deleted. This cannot be undone.",
"photoHiddenToast": "Hidden",
"photoUnhiddenToast": "Unhidden",
"photoDeletedToast": "Deleted",
"photoReload": "Reload",
"photoPreviewUnavailable": "Image unavailable"
}
+102
View File
@@ -1129,6 +1129,108 @@ abstract class AppLocalizations {
/// In zh, this message translates to:
/// **'未选择照片'**
String get uploadPickNone;
/// No description provided for @albumManagePhotos.
///
/// In zh, this message translates to:
/// **'管理照片'**
String get albumManagePhotos;
/// No description provided for @albumTakeFirstPhoto.
///
/// In zh, this message translates to:
/// **'拍摄第一张照片'**
String get albumTakeFirstPhoto;
/// No description provided for @albumUploadDisabledHint.
///
/// In zh, this message translates to:
/// **'相册已关闭上传,暂不能新增照片'**
String get albumUploadDisabledHint;
/// No description provided for @albumRecentPhotos.
///
/// In zh, this message translates to:
/// **'最近上传'**
String get albumRecentPhotos;
/// No description provided for @photoFilterAll.
///
/// In zh, this message translates to:
/// **'全部'**
String get photoFilterAll;
/// No description provided for @photoFilterFailed.
///
/// In zh, this message translates to:
/// **'失败'**
String get photoFilterFailed;
/// No description provided for @photosScopeOwnHint.
///
/// In zh, this message translates to:
/// **'协作者视图:仅显示你上传的照片'**
String get photosScopeOwnHint;
/// No description provided for @photosEmptyFiltered.
///
/// In zh, this message translates to:
/// **'当前筛选下暂无照片'**
String get photosEmptyFiltered;
/// No description provided for @photoHide.
///
/// In zh, this message translates to:
/// **'隐藏'**
String get photoHide;
/// No description provided for @photoUnhide.
///
/// In zh, this message translates to:
/// **'恢复显示'**
String get photoUnhide;
/// No description provided for @photoDeleteConfirmTitle.
///
/// In zh, this message translates to:
/// **'删除这张照片?'**
String get photoDeleteConfirmTitle;
/// No description provided for @photoDeleteConfirmBody.
///
/// In zh, this message translates to:
/// **'云端照片将被删除,删除后不可恢复。'**
String get photoDeleteConfirmBody;
/// No description provided for @photoHiddenToast.
///
/// In zh, this message translates to:
/// **'已隐藏'**
String get photoHiddenToast;
/// No description provided for @photoUnhiddenToast.
///
/// In zh, this message translates to:
/// **'已恢复显示'**
String get photoUnhiddenToast;
/// No description provided for @photoDeletedToast.
///
/// In zh, this message translates to:
/// **'已删除'**
String get photoDeletedToast;
/// No description provided for @photoReload.
///
/// In zh, this message translates to:
/// **'重新加载'**
String get photoReload;
/// No description provided for @photoPreviewUnavailable.
///
/// In zh, this message translates to:
/// **'图片暂不可用'**
String get photoPreviewUnavailable;
}
class _AppLocalizationsDelegate
@@ -551,4 +551,58 @@ class AppLocalizationsEn extends AppLocalizations {
@override
String get uploadPickNone => 'No photos selected';
@override
String get albumManagePhotos => 'Manage photos';
@override
String get albumTakeFirstPhoto => 'Take the first photo';
@override
String get albumUploadDisabledHint =>
'Uploads are off for this album. New photos cannot be added right now';
@override
String get albumRecentPhotos => 'Recent uploads';
@override
String get photoFilterAll => 'All';
@override
String get photoFilterFailed => 'Failed';
@override
String get photosScopeOwnHint =>
'Collaborator view: only photos you uploaded are shown';
@override
String get photosEmptyFiltered => 'No photos match this filter';
@override
String get photoHide => 'Hide';
@override
String get photoUnhide => 'Unhide';
@override
String get photoDeleteConfirmTitle => 'Delete this photo?';
@override
String get photoDeleteConfirmBody =>
'The cloud photo will be deleted. This cannot be undone.';
@override
String get photoHiddenToast => 'Hidden';
@override
String get photoUnhiddenToast => 'Unhidden';
@override
String get photoDeletedToast => 'Deleted';
@override
String get photoReload => 'Reload';
@override
String get photoPreviewUnavailable => 'Image unavailable';
}
@@ -535,4 +535,55 @@ class AppLocalizationsZh extends AppLocalizations {
@override
String get uploadPickNone => '未选择照片';
@override
String get albumManagePhotos => '管理照片';
@override
String get albumTakeFirstPhoto => '拍摄第一张照片';
@override
String get albumUploadDisabledHint => '相册已关闭上传,暂不能新增照片';
@override
String get albumRecentPhotos => '最近上传';
@override
String get photoFilterAll => '全部';
@override
String get photoFilterFailed => '失败';
@override
String get photosScopeOwnHint => '协作者视图:仅显示你上传的照片';
@override
String get photosEmptyFiltered => '当前筛选下暂无照片';
@override
String get photoHide => '隐藏';
@override
String get photoUnhide => '恢复显示';
@override
String get photoDeleteConfirmTitle => '删除这张照片?';
@override
String get photoDeleteConfirmBody => '云端照片将被删除,删除后不可恢复。';
@override
String get photoHiddenToast => '已隐藏';
@override
String get photoUnhiddenToast => '已恢复显示';
@override
String get photoDeletedToast => '已删除';
@override
String get photoReload => '重新加载';
@override
String get photoPreviewUnavailable => '图片暂不可用';
}
+18 -1
View File
@@ -177,5 +177,22 @@
"uploadAction": "上传",
"uploadEnqueuedCount": "已加入 {count} 张上传队列",
"@uploadEnqueuedCount": { "placeholders": { "count": { "type": "int" } } },
"uploadPickNone": "未选择照片"
"uploadPickNone": "未选择照片",
"albumManagePhotos": "管理照片",
"albumTakeFirstPhoto": "拍摄第一张照片",
"albumUploadDisabledHint": "相册已关闭上传,暂不能新增照片",
"albumRecentPhotos": "最近上传",
"photoFilterAll": "全部",
"photoFilterFailed": "失败",
"photosScopeOwnHint": "协作者视图:仅显示你上传的照片",
"photosEmptyFiltered": "当前筛选下暂无照片",
"photoHide": "隐藏",
"photoUnhide": "恢复显示",
"photoDeleteConfirmTitle": "删除这张照片?",
"photoDeleteConfirmBody": "云端照片将被删除,删除后不可恢复。",
"photoHiddenToast": "已隐藏",
"photoUnhiddenToast": "已恢复显示",
"photoDeletedToast": "已删除",
"photoReload": "重新加载",
"photoPreviewUnavailable": "图片暂不可用"
}