feat(ui): implement award mockup redesign
Build & Deploy Pluriwave / Análisis de código (push) Successful in 10s
Build & Deploy Pluriwave / Build APK + AAB release (push) Successful in 1m19s

This commit is contained in:
2026-05-20 21:29:36 +02:00
parent eb0ef37c76
commit d8acf74771
14 changed files with 621 additions and 211 deletions
+76 -4
View File
@@ -79,7 +79,32 @@ class _TarjetaEmisoraState extends State<TarjetaEmisora> {
Column(
crossAxisAlignment: CrossAxisAlignment.start,
children: [
AspectRatio(aspectRatio: 1, child: _logo(60)),
AspectRatio(
aspectRatio: 1,
child: Stack(
fit: StackFit.expand,
children: [
_logo(60),
DecoratedBox(
decoration: BoxDecoration(
gradient: LinearGradient(
begin: Alignment.topCenter,
end: Alignment.bottomCenter,
colors: [
Colors.transparent,
Colors.black.withValues(alpha: 0.34),
],
),
),
),
Positioned(
left: t.spacingSm,
bottom: t.spacingSm,
child: _LiveBadge(mini: true),
),
],
),
),
Padding(
padding: EdgeInsets.fromLTRB(
t.spacingMd,
@@ -140,9 +165,25 @@ class _TarjetaEmisoraState extends State<TarjetaEmisora> {
),
child: Row(
children: [
ClipRRect(
borderRadius: BorderRadius.circular(t.radiusSm),
child: SizedBox(width: 48, height: 48, child: _logo(24)),
Stack(
alignment: Alignment.center,
children: [
Container(
width: 58,
height: 58,
decoration: BoxDecoration(
shape: BoxShape.circle,
gradient: SweepGradient(
colors: [t.electricMagenta, const Color(0xFF20E6FF), t.warmCoral, t.electricMagenta],
),
boxShadow: [BoxShadow(color: t.glowColor.withValues(alpha: 0.24), blurRadius: 22)],
),
),
ClipRRect(
borderRadius: BorderRadius.circular(18),
child: SizedBox(width: 50, height: 50, child: _logo(24)),
),
],
),
SizedBox(width: t.spacingSm),
Expanded(
@@ -172,6 +213,8 @@ class _TarjetaEmisoraState extends State<TarjetaEmisora> {
],
),
),
const SizedBox(width: 8),
_LiveBadge(mini: false),
_botonFavorito(mini: false),
],
),
@@ -271,6 +314,35 @@ class _TarjetaEmisoraState extends State<TarjetaEmisora> {
}
}
class _LiveBadge extends StatelessWidget {
const _LiveBadge({required this.mini});
final bool mini;
@override
Widget build(BuildContext context) {
final color = Theme.of(context).colorScheme.secondary;
return Container(
padding: EdgeInsets.symmetric(horizontal: mini ? 8 : 6, vertical: mini ? 5 : 4),
decoration: BoxDecoration(
borderRadius: BorderRadius.circular(999),
color: Colors.black.withValues(alpha: 0.35),
border: Border.all(color: color.withValues(alpha: 0.48)),
),
child: Row(
mainAxisSize: MainAxisSize.min,
children: [
Icon(Icons.fiber_manual_record_rounded, size: mini ? 10 : 8, color: color),
if (mini) ...[
const SizedBox(width: 5),
Text('Live', style: Theme.of(context).textTheme.labelSmall?.copyWith(fontWeight: FontWeight.w900)),
],
],
),
);
}
}
/// Placeholder shimmer para listas en carga.
class TarjetaEmisoraShimmer extends StatelessWidget {
const TarjetaEmisoraShimmer({super.key});