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": "已经是最新版本",