Files
MatchLiveTv/mobile/lib/shared/widgets/metric_card.dart
Emiliano Frascaro bba6df52c0 Initial commit: monorepo Match Live TV.
Rails API, app Flutter, infrastruttura Docker/MediaMTX, sito marketing e documentazione di deploy.

Co-authored-by: Cursor <cursoragent@cursor.com>
2026-05-26 17:45:37 +02:00

66 lines
1.7 KiB
Dart

import 'package:flutter/material.dart';
import '../../app/theme.dart';
/// Card metrica singola (segnale, Mbps, fps).
class MetricCard extends StatelessWidget {
const MetricCard({
super.key,
required this.label,
required this.value,
this.icon,
this.highlight = false,
this.expand = true,
});
final String label;
final String value;
final IconData? icon;
final bool highlight;
final bool expand;
@override
Widget build(BuildContext context) {
final theme = Theme.of(context);
final card = Container(
padding: const EdgeInsets.symmetric(vertical: 12, horizontal: 8),
decoration: BoxDecoration(
color: AppTheme.surfaceElevated,
borderRadius: BorderRadius.circular(10),
border: highlight
? Border.all(color: AppTheme.successGreen.withValues(alpha: 0.5))
: null,
),
child: Column(
mainAxisSize: MainAxisSize.min,
children: [
if (icon != null) ...[
Icon(icon, size: 18, color: AppTheme.textSecondary),
const SizedBox(height: 4),
],
Text(
value,
style: theme.textTheme.titleLarge?.copyWith(
color: highlight ? AppTheme.successGreen : Colors.white,
fontWeight: FontWeight.w900,
),
textAlign: TextAlign.center,
),
const SizedBox(height: 2),
Text(
label,
style: theme.textTheme.bodyMedium?.copyWith(fontSize: 11),
textAlign: TextAlign.center,
),
],
),
);
if (!expand) {
return SizedBox(width: 72, child: card);
}
return Expanded(child: card);
}
}