refactor(ui): polish extension update affordance per review

- Move the update dot from the icon corner to beside the card title
- Restyle the card update button to match the row's ghost buttons
- Drop the detail-view dot; the existing update status chip covers it
- Rename the detail update button label to just Update
This commit is contained in:
Levi committed 2026-09-19 19:04:58 +08:00
1 parent d94b59b165
commit d8758267c4
2 files changed
+33 -55

No files matched your search

@@ -65,32 +65,12 @@ class ExtensionDetailView extends ConsumerWidget {
key: const ValueKey('extension-details-hero'),
crossAxisAlignment: CrossAxisAlignment.start,
children: [
Stack(
clipBehavior: Clip.none,
children: [
ExtensionIcon(
item: current,
size: mobile ? 60 : 68,
borderRadius: BorderRadius.circular(14),
fallbackPadding: EdgeInsets.all((mobile ? 60 : 68) * 0.16),
fallbackBackgroundColor: palette.surfaceSoft,
),
if (canUpdate)
Positioned(
top: -2,
right: -2,
child: Container(
key: const ValueKey('extension-details-update-dot'),
width: 13,
height: 13,
decoration: BoxDecoration(
color: palette.error,
shape: BoxShape.circle,
border: Border.all(color: palette.bg, width: 2.5),
),
),
),
],
ExtensionIcon(
item: current,
size: mobile ? 60 : 68,
borderRadius: BorderRadius.circular(14),
fallbackPadding: EdgeInsets.all((mobile ? 60 : 68) * 0.16),
fallbackBackgroundColor: palette.surfaceSoft,
),
SizedBox(width: mobile ? 16 : 20),
Expanded(
@@ -157,7 +137,7 @@ class ExtensionDetailView extends ConsumerWidget {
variant: AppLoadingButtonVariant.primary,
icon: const Icon(Icons.upgrade, size: 16),
onPressed: busy ? null : () => showExtensionUpdateDialog(context, installed),
child: Text(context.l10n.newVersionUpdate),
child: Text(context.l10n.extensionUpdateAction),
),
if (installed != null && !canUpdate)
AppLoadingButton(