fix(profile): replace the profile tile chips with inline metadata

The Active badge and connection chips used opaque primaryContainer /
surfaceContainerHighest - both resolve to the card surface color in the
mono scheme, so they punched dark holes in the focused tile's background
highlight, and boxed pills fight that fill however they are tinted. The
Active badge becomes a muted check icon + label next to the name, and
connection chips become plain muted icon + text entries, matching the
app's other meta rows.
This commit is contained in:
edde746
2026-08-23 10:12:27 +02:00
parent 07463eea04
commit 5842d9c1ec
+26 -29
View File
@@ -460,16 +460,13 @@ class _ProfileTile extends StatelessWidget {
),
if (isActive) ...[
const SizedBox(width: 8),
Container(
padding: const EdgeInsets.symmetric(horizontal: 8, vertical: 2),
decoration: BoxDecoration(
color: theme.colorScheme.primaryContainer,
borderRadius: BorderRadius.circular(6),
),
child: Text(
t.profiles.active,
style: theme.textTheme.labelSmall?.copyWith(color: theme.colorScheme.onPrimaryContainer),
),
// Plain inline indicator instead of a boxed badge: a
// filled pill fights the tile's own focus fill.
AppIcon(Symbols.check_circle_rounded, fill: 1, size: 16, color: tokens(context).textMuted),
const SizedBox(width: 4),
Text(
t.profiles.active,
style: theme.textTheme.labelMedium?.copyWith(color: tokens(context).textMuted),
),
],
],
@@ -569,30 +566,30 @@ class _ConnectionChips extends StatelessWidget {
if (chips.isEmpty) {
return Text(t.profiles.noConnections, style: theme.textTheme.bodySmall?.copyWith(color: theme.colorScheme.error));
}
// Plain muted metadata instead of boxed chips: any filled pill fights the
// tile's own focus fill (and the opaque theme surfaces read as dark holes
// on it), so the connections render like the app's other meta rows.
return Wrap(
spacing: 6,
spacing: 12,
runSpacing: 4,
children: [
for (final c in chips)
Container(
padding: const EdgeInsets.symmetric(horizontal: 8, vertical: 3),
decoration: BoxDecoration(
color: theme.colorScheme.surfaceContainerHighest,
borderRadius: BorderRadius.circular(6),
),
child: Row(
mainAxisSize: .min,
children: [
BackendBadge(backend: c.backend, size: 12),
const SizedBox(width: 4),
// Account labels are often an email address, and a chip in a
// Wrap gets unbounded main-axis space — without this the row
// overflows the tile instead of ellipsizing.
Flexible(
child: Text(c.label, style: theme.textTheme.labelSmall, overflow: .ellipsis),
Row(
mainAxisSize: .min,
children: [
BackendBadge(backend: c.backend, size: 12),
const SizedBox(width: 5),
// Account labels are often an email address, and an entry in a
// Wrap gets unbounded main-axis space — without this the row
// overflows the tile instead of ellipsizing.
Flexible(
child: Text(
c.label,
style: theme.textTheme.labelSmall?.copyWith(color: tokens(context).textMuted),
overflow: .ellipsis,
),
],
),
),
],
),
],
);