From 04ebca60cf98312665210d5fd56478c21ba27e11 Mon Sep 17 00:00:00 2001 From: Levi Date: Sat, 19 Sep 2026 20:49:20 +0800 Subject: [PATCH] refactor(ui): make the status chip the only update entry Remove the update button from the detail actions; the green chip next to the extension title opens the update dialog on cards, the desktop drawer and the mobile details page alike. --- .../pages/extension_details_page.dart | 9 ++++++++- .../widgets/extension_detail_view.dart | 18 ++++++++---------- ui/flutter/lib/l10n/app_en.arb | 1 - ui/flutter/lib/l10n/app_zh.arb | 1 - 4 files changed, 16 insertions(+), 13 deletions(-) diff --git a/ui/flutter/lib/features/extensions/presentation/pages/extension_details_page.dart b/ui/flutter/lib/features/extensions/presentation/pages/extension_details_page.dart index 3ae0b6ec..8c81eca5 100644 --- a/ui/flutter/lib/features/extensions/presentation/pages/extension_details_page.dart +++ b/ui/flutter/lib/features/extensions/presentation/pages/extension_details_page.dart @@ -8,6 +8,7 @@ import '../../../../shared/theme/app_palette.dart'; import '../../../../shared/widgets/detail/app_detail_surface.dart'; import '../../application/extensions_controller.dart'; import '../widgets/extension_detail_view.dart'; +import '../widgets/extension_update_dialog.dart'; import '../widgets/extension_update_status.dart'; class ExtensionDetailsPage extends ConsumerWidget { @@ -26,7 +27,13 @@ class ExtensionDetailsPage extends ConsumerWidget { title: item?.title ?? context.l10n.extensions, onBack: () => context.canPop() ? context.pop() : context.go('/extensions'), titleTrailing: _canUpdate(stateAsync.value, item) - ? ExtensionUpdateStatus(label: context.l10n.extensionCanUpdate) + ? ExtensionUpdateStatus( + key: const ValueKey('extension-details-update-mobile'), + label: context.l10n.extensionCanUpdate, + onTap: item?.installed == null + ? null + : () => showExtensionUpdateDialog(context, item!.installed!), + ) : null, child: item == null ? Center( diff --git a/ui/flutter/lib/features/extensions/presentation/widgets/extension_detail_view.dart b/ui/flutter/lib/features/extensions/presentation/widgets/extension_detail_view.dart index ad159938..73431ea7 100644 --- a/ui/flutter/lib/features/extensions/presentation/widgets/extension_detail_view.dart +++ b/ui/flutter/lib/features/extensions/presentation/widgets/extension_detail_view.dart @@ -35,12 +35,19 @@ class ExtensionDetailDrawer extends ConsumerWidget { final installed = item?.installed; final canUpdate = item != null && installed != null && (state?.updateFlags.containsKey(installed.identity) ?? false); + final updateChip = canUpdate + ? ExtensionUpdateStatus( + key: const ValueKey('extension-details-update'), + label: context.l10n.extensionCanUpdate, + onTap: () => showExtensionUpdateDialog(context, installed), + ) + : null; return AppDetailDrawer( open: item != null, title: item?.title ?? '', onClose: onClose, drawerKey: const ValueKey('extension-details-drawer'), - titleTrailing: canUpdate ? ExtensionUpdateStatus(label: context.l10n.extensionCanUpdate) : null, + titleTrailing: updateChip, child: item == null ? const SizedBox.shrink() : ExtensionDetailView(item: item!), ); } @@ -134,15 +141,6 @@ class ExtensionDetailView extends ConsumerWidget { _runAction(context, () => ref.read(extensionsControllerProvider.notifier).installFromStore(store)), child: Text(context.l10n.extensionInstall), ), - if (installed != null && canUpdate) - AppLoadingButton( - key: const ValueKey('extension-details-update'), - loading: false, - variant: AppLoadingButtonVariant.primary, - icon: const Icon(Icons.upgrade, size: 16), - onPressed: busy ? null : () => showExtensionUpdateDialog(context, installed), - child: Text(context.l10n.extensionUpdateAction), - ), if (installed != null && !canUpdate) AppLoadingButton( key: const ValueKey('extension-details-installed'), diff --git a/ui/flutter/lib/l10n/app_en.arb b/ui/flutter/lib/l10n/app_en.arb index 48059151..ba46fd44 100644 --- a/ui/flutter/lib/l10n/app_en.arb +++ b/ui/flutter/lib/l10n/app_en.arb @@ -120,7 +120,6 @@ } }, "extensionUpdateSuccess": "Updated successfully", - "extensionUpdateAction": "Update", "extensionUpdateCheckFailed": "Failed to check for updates. Please check your network", "extensionDelete": "Delete Extension", "extensionAlreadyLatest": "It's already the latest version", diff --git a/ui/flutter/lib/l10n/app_zh.arb b/ui/flutter/lib/l10n/app_zh.arb index 2cbd5aa7..6e724adc 100644 --- a/ui/flutter/lib/l10n/app_zh.arb +++ b/ui/flutter/lib/l10n/app_zh.arb @@ -106,7 +106,6 @@ "extensionInstallSuccess": "安装成功", "extensionUpdateConfirm": "确定将“{name}”更新到最新版本吗?", "extensionUpdateSuccess": "更新成功", - "extensionUpdateAction": "更新", "extensionUpdateCheckFailed": "检查更新失败,请检查网络后重试", "extensionDelete": "删除扩展", "extensionAlreadyLatest": "已经是最新版本",