Limpieza de peso de imágenes
|
Before Width: | Height: | Size: 102 KiB |
BIN
assets/medals/brasa.webp
Normal file
|
After Width: | Height: | Size: 23 KiB |
|
Before Width: | Height: | Size: 107 KiB |
BIN
assets/medals/cincuenta_victorias.webp
Normal file
|
After Width: | Height: | Size: 25 KiB |
|
Before Width: | Height: | Size: 91 KiB |
BIN
assets/medals/diez_victorias.webp
Normal file
|
After Width: | Height: | Size: 20 KiB |
|
Before Width: | Height: | Size: 116 KiB |
BIN
assets/medals/habitual.webp
Normal file
|
After Width: | Height: | Size: 26 KiB |
|
Before Width: | Height: | Size: 106 KiB |
BIN
assets/medals/impostor_habitual.webp
Normal file
|
After Width: | Height: | Size: 25 KiB |
|
Before Width: | Height: | Size: 110 KiB |
BIN
assets/medals/incandescente.webp
Normal file
|
After Width: | Height: | Size: 27 KiB |
|
Before Width: | Height: | Size: 116 KiB |
BIN
assets/medals/leyenda.webp
Normal file
|
After Width: | Height: | Size: 28 KiB |
|
Before Width: | Height: | Size: 101 KiB |
BIN
assets/medals/llama_fuerte.webp
Normal file
|
After Width: | Height: | Size: 24 KiB |
|
Before Width: | Height: | Size: 96 KiB |
BIN
assets/medals/llama_suave.webp
Normal file
|
After Width: | Height: | Size: 22 KiB |
|
Before Width: | Height: | Size: 107 KiB |
BIN
assets/medals/lobo_faroles.webp
Normal file
|
After Width: | Height: | Size: 25 KiB |
|
Before Width: | Height: | Size: 103 KiB |
BIN
assets/medals/novato.webp
Normal file
|
After Width: | Height: | Size: 21 KiB |
|
Before Width: | Height: | Size: 104 KiB |
BIN
assets/medals/primer_engano.webp
Normal file
|
After Width: | Height: | Size: 23 KiB |
|
Before Width: | Height: | Size: 79 KiB |
BIN
assets/medals/primera_victoria.webp
Normal file
|
After Width: | Height: | Size: 18 KiB |
|
Before Width: | Height: | Size: 98 KiB |
BIN
assets/medals/veinticinco_victorias.webp
Normal file
|
After Width: | Height: | Size: 24 KiB |
|
Before Width: | Height: | Size: 116 KiB |
BIN
assets/medals/veterano.webp
Normal file
|
After Width: | Height: | Size: 27 KiB |
|
Before Width: | Height: | Size: 164 KiB |
|
Before Width: | Height: | Size: 538 KiB |
BIN
assets/rewards/medal_unlock_burst.webp
Normal file
|
After Width: | Height: | Size: 186 KiB |
|
Before Width: | Height: | Size: 1.2 MiB |
|
Before Width: | Height: | Size: 1.5 MiB |
BIN
assets/ui/generated/create_game/create_game_header_art.webp
Normal file
|
After Width: | Height: | Size: 122 KiB |
|
Before Width: | Height: | Size: 1.8 MiB |
|
Before Width: | Height: | Size: 1.8 MiB |
BIN
assets/ui/generated/final_rewards/cinematic_burst.webp
Normal file
|
After Width: | Height: | Size: 179 KiB |
|
Before Width: | Height: | Size: 2.0 MiB |
|
Before Width: | Height: | Size: 1.7 MiB |
|
Before Width: | Height: | Size: 1.7 MiB |
BIN
assets/ui/generated/gameplay/gameplay_phase_emblem.webp
Normal file
|
After Width: | Height: | Size: 113 KiB |
|
Before Width: | Height: | Size: 2.0 MiB |
BIN
assets/ui/generated/gameplay/notes_strategy_art.webp
Normal file
|
After Width: | Height: | Size: 126 KiB |
|
Before Width: | Height: | Size: 1.0 MiB |
BIN
assets/ui/generated/join_lobby/qr_frame.webp
Normal file
|
After Width: | Height: | Size: 113 KiB |
|
Before Width: | Height: | Size: 1.6 MiB |
|
Before Width: | Height: | Size: 993 KiB |
BIN
assets/ui/generated/join_lobby/signal_art.webp
Normal file
|
After Width: | Height: | Size: 129 KiB |
|
Before Width: | Height: | Size: 1.6 MiB |
|
Before Width: | Height: | Size: 1.7 MiB |
BIN
assets/ui/generated/main/main_atmosphere_bg.webp
Normal file
|
After Width: | Height: | Size: 89 KiB |
|
Before Width: | Height: | Size: 504 KiB |
BIN
assets/ui/generated/main/main_cta_frame.webp
Normal file
|
After Width: | Height: | Size: 55 KiB |
|
Before Width: | Height: | Size: 1.2 MiB |
|
Before Width: | Height: | Size: 1.1 MiB |
BIN
assets/ui/generated/main/main_lantern_hero.webp
Normal file
|
After Width: | Height: | Size: 69 KiB |
|
Before Width: | Height: | Size: 1.6 MiB |
|
Before Width: | Height: | Size: 2.1 MiB |
BIN
assets/ui/generated/meta/history_ledger_art.webp
Normal file
|
After Width: | Height: | Size: 131 KiB |
|
Before Width: | Height: | Size: 1.9 MiB |
BIN
assets/ui/generated/meta/result_verdict_art.webp
Normal file
|
After Width: | Height: | Size: 129 KiB |
|
Before Width: | Height: | Size: 1.9 MiB |
BIN
assets/ui/generated/meta/settings_profile_art.webp
Normal file
|
After Width: | Height: | Size: 124 KiB |
|
Before Width: | Height: | Size: 1.3 MiB |
BIN
assets/ui/generated/mode/mode_duel_hero.webp
Normal file
|
After Width: | Height: | Size: 85 KiB |
|
Before Width: | Height: | Size: 1.7 MiB |
|
Before Width: | Height: | Size: 1.4 MiB |
BIN
assets/ui/generated/mode/mode_multi_card_frame.webp
Normal file
|
After Width: | Height: | Size: 75 KiB |
|
Before Width: | Height: | Size: 1.4 MiB |
|
Before Width: | Height: | Size: 1.5 MiB |
BIN
assets/ui/generated/mode/mode_single_card_frame.webp
Normal file
|
After Width: | Height: | Size: 82 KiB |
|
Before Width: | Height: | Size: 1.6 MiB |
|
Before Width: | Height: | Size: 1.5 MiB |
|
Before Width: | Height: | Size: 1.5 MiB |
BIN
assets/ui/generated/shared/screen_atmosphere_bg.webp
Normal file
|
After Width: | Height: | Size: 143 KiB |
@@ -76,21 +76,21 @@ class EstadisticasPerfilUsuario {
|
|||||||
});
|
});
|
||||||
|
|
||||||
static const catalogoMedallas = <String, MedallaUsuario>{
|
static const catalogoMedallas = <String, MedallaUsuario>{
|
||||||
'novato': MedallaUsuario(id: 'novato', emoji: '🎲', assetPath: 'assets/medals/novato.png', nombre: 'Novato', descripcion: 'Jugó su primera partida.'),
|
'novato': MedallaUsuario(id: 'novato', emoji: '🎲', assetPath: 'assets/medals/novato.webp', nombre: 'Novato', descripcion: 'Jugó su primera partida.'),
|
||||||
'habitual': MedallaUsuario(id: 'habitual', emoji: '🧭', assetPath: 'assets/medals/habitual.png', nombre: 'Habitual', descripcion: 'Jugó 10 partidas.'),
|
'habitual': MedallaUsuario(id: 'habitual', emoji: '🧭', assetPath: 'assets/medals/habitual.webp', nombre: 'Habitual', descripcion: 'Jugó 10 partidas.'),
|
||||||
'veterano': MedallaUsuario(id: 'veterano', emoji: '🏛️', assetPath: 'assets/medals/veterano.png', nombre: 'Veterano', descripcion: 'Jugó 50 partidas.'),
|
'veterano': MedallaUsuario(id: 'veterano', emoji: '🏛️', assetPath: 'assets/medals/veterano.webp', nombre: 'Veterano', descripcion: 'Jugó 50 partidas.'),
|
||||||
'leyenda': MedallaUsuario(id: 'leyenda', emoji: '👑', assetPath: 'assets/medals/leyenda.png', nombre: 'Leyenda', descripcion: 'Jugó 100 partidas.'),
|
'leyenda': MedallaUsuario(id: 'leyenda', emoji: '👑', assetPath: 'assets/medals/leyenda.webp', nombre: 'Leyenda', descripcion: 'Jugó 100 partidas.'),
|
||||||
'primera_victoria': MedallaUsuario(id: 'primera_victoria', emoji: '🥉', assetPath: 'assets/medals/primera_victoria.png', nombre: 'Primera victoria', descripcion: 'Ganó una partida.'),
|
'primera_victoria': MedallaUsuario(id: 'primera_victoria', emoji: '🥉', assetPath: 'assets/medals/primera_victoria.webp', nombre: 'Primera victoria', descripcion: 'Ganó una partida.'),
|
||||||
'diez_victorias': MedallaUsuario(id: 'diez_victorias', emoji: '🥈', assetPath: 'assets/medals/diez_victorias.png', nombre: 'Diez victorias', descripcion: 'Ganó 10 partidas.'),
|
'diez_victorias': MedallaUsuario(id: 'diez_victorias', emoji: '🥈', assetPath: 'assets/medals/diez_victorias.webp', nombre: 'Diez victorias', descripcion: 'Ganó 10 partidas.'),
|
||||||
'veinticinco_victorias': MedallaUsuario(id: 'veinticinco_victorias', emoji: '🥇', assetPath: 'assets/medals/veinticinco_victorias.png', nombre: 'Veinticinco victorias', descripcion: 'Ganó 25 partidas.'),
|
'veinticinco_victorias': MedallaUsuario(id: 'veinticinco_victorias', emoji: '🥇', assetPath: 'assets/medals/veinticinco_victorias.webp', nombre: 'Veinticinco victorias', descripcion: 'Ganó 25 partidas.'),
|
||||||
'cincuenta_victorias': MedallaUsuario(id: 'cincuenta_victorias', emoji: '💎', assetPath: 'assets/medals/cincuenta_victorias.png', nombre: 'Cincuenta victorias', descripcion: 'Ganó 50 partidas.'),
|
'cincuenta_victorias': MedallaUsuario(id: 'cincuenta_victorias', emoji: '💎', assetPath: 'assets/medals/cincuenta_victorias.webp', nombre: 'Cincuenta victorias', descripcion: 'Ganó 50 partidas.'),
|
||||||
'primer_engano': MedallaUsuario(id: 'primer_engano', emoji: '🎭', assetPath: 'assets/medals/primer_engano.png', nombre: 'Primer engaño', descripcion: 'Ganó como impostor.'),
|
'primer_engano': MedallaUsuario(id: 'primer_engano', emoji: '🎭', assetPath: 'assets/medals/primer_engano.webp', nombre: 'Primer engaño', descripcion: 'Ganó como impostor.'),
|
||||||
'impostor_habitual': MedallaUsuario(id: 'impostor_habitual', emoji: '🃏', assetPath: 'assets/medals/impostor_habitual.png', nombre: 'Impostor habitual', descripcion: 'Ganó 5 partidas como impostor.'),
|
'impostor_habitual': MedallaUsuario(id: 'impostor_habitual', emoji: '🃏', assetPath: 'assets/medals/impostor_habitual.webp', nombre: 'Impostor habitual', descripcion: 'Ganó 5 partidas como impostor.'),
|
||||||
'lobo_faroles': MedallaUsuario(id: 'lobo_faroles', emoji: '🐺', assetPath: 'assets/medals/lobo_faroles.png', nombre: 'Lobo entre faroles', descripcion: 'Ganó 15 partidas como impostor.'),
|
'lobo_faroles': MedallaUsuario(id: 'lobo_faroles', emoji: '🐺', assetPath: 'assets/medals/lobo_faroles.webp', nombre: 'Lobo entre faroles', descripcion: 'Ganó 15 partidas como impostor.'),
|
||||||
'brasa': MedallaUsuario(id: 'brasa', emoji: '♨️', assetPath: 'assets/medals/brasa.png', nombre: 'Brasa', descripcion: 'Mantiene algo de fuego reciente.'),
|
'brasa': MedallaUsuario(id: 'brasa', emoji: '♨️', assetPath: 'assets/medals/brasa.webp', nombre: 'Brasa', descripcion: 'Mantiene algo de fuego reciente.'),
|
||||||
'llama_suave': MedallaUsuario(id: 'llama_suave', emoji: '🔥', assetPath: 'assets/medals/llama_suave.png', nombre: 'Llama suave', descripcion: 'Está jugando con cierta asiduidad.'),
|
'llama_suave': MedallaUsuario(id: 'llama_suave', emoji: '🔥', assetPath: 'assets/medals/llama_suave.webp', nombre: 'Llama suave', descripcion: 'Está jugando con cierta asiduidad.'),
|
||||||
'llama_fuerte': MedallaUsuario(id: 'llama_fuerte', emoji: '🔥', assetPath: 'assets/medals/llama_fuerte.png', nombre: 'Llama fuerte', descripcion: 'Tiene una asiduidad alta.'),
|
'llama_fuerte': MedallaUsuario(id: 'llama_fuerte', emoji: '🔥', assetPath: 'assets/medals/llama_fuerte.webp', nombre: 'Llama fuerte', descripcion: 'Tiene una asiduidad alta.'),
|
||||||
'incandescente': MedallaUsuario(id: 'incandescente', emoji: '🌋', assetPath: 'assets/medals/incandescente.png', nombre: 'Incandescente', descripcion: 'Tiene el fuego al máximo.'),
|
'incandescente': MedallaUsuario(id: 'incandescente', emoji: '🌋', assetPath: 'assets/medals/incandescente.webp', nombre: 'Incandescente', descripcion: 'Tiene el fuego al máximo.'),
|
||||||
};
|
};
|
||||||
|
|
||||||
EstadisticasPerfilUsuario copiar({
|
EstadisticasPerfilUsuario copiar({
|
||||||
|
|||||||
@@ -58,7 +58,7 @@ class _PantallaAdivinanzaState extends State<PantallaAdivinanza> {
|
|||||||
subtitulo: l10n.ifCorrectImpostorsWin,
|
subtitulo: l10n.ifCorrectImpostorsWin,
|
||||||
color: TemaApp.colorAcento,
|
color: TemaApp.colorAcento,
|
||||||
trailing: Image.asset(
|
trailing: Image.asset(
|
||||||
'assets/ui/premium/vote_danger_glow.png',
|
'assets/ui/generated/meta/result_verdict_art.webp',
|
||||||
width: 42,
|
width: 42,
|
||||||
height: 42,
|
height: 42,
|
||||||
opacity: const AlwaysStoppedAnimation(0.64),
|
opacity: const AlwaysStoppedAnimation(0.64),
|
||||||
|
|||||||
@@ -644,7 +644,7 @@ class _CrearPartidaHeader extends StatelessWidget {
|
|||||||
AspectRatio(
|
AspectRatio(
|
||||||
aspectRatio: 2,
|
aspectRatio: 2,
|
||||||
child: Image.asset(
|
child: Image.asset(
|
||||||
'assets/ui/generated/create_game/create_game_header_art.png',
|
'assets/ui/generated/create_game/create_game_header_art.webp',
|
||||||
fit: BoxFit.contain,
|
fit: BoxFit.contain,
|
||||||
opacity: const AlwaysStoppedAnimation(0.96),
|
opacity: const AlwaysStoppedAnimation(0.96),
|
||||||
),
|
),
|
||||||
|
|||||||
@@ -103,7 +103,7 @@ class _PantallaDebateState extends State<PantallaDebate> {
|
|||||||
children: [
|
children: [
|
||||||
Positioned.fill(
|
Positioned.fill(
|
||||||
child: Image.asset(
|
child: Image.asset(
|
||||||
'assets/ui/premium/timer_ring_glow.png',
|
'assets/ui/generated/gameplay/gameplay_phase_emblem.webp',
|
||||||
fit: BoxFit.contain,
|
fit: BoxFit.contain,
|
||||||
opacity: const AlwaysStoppedAnimation(0.36),
|
opacity: const AlwaysStoppedAnimation(0.36),
|
||||||
),
|
),
|
||||||
|
|||||||
@@ -183,7 +183,7 @@ class _PantallaDebateClienteState extends State<PantallaDebateCliente> {
|
|||||||
children: [
|
children: [
|
||||||
Positioned.fill(
|
Positioned.fill(
|
||||||
child: Image.asset(
|
child: Image.asset(
|
||||||
'assets/ui/premium/timer_ring_glow.png',
|
'assets/ui/generated/gameplay/gameplay_phase_emblem.webp',
|
||||||
fit: BoxFit.contain,
|
fit: BoxFit.contain,
|
||||||
opacity: const AlwaysStoppedAnimation(0.42),
|
opacity: const AlwaysStoppedAnimation(0.42),
|
||||||
),
|
),
|
||||||
|
|||||||
@@ -125,51 +125,49 @@ class _PantallaFinPartidaState extends State<PantallaFinPartida> {
|
|||||||
? TemaApp.colorVerde
|
? TemaApp.colorVerde
|
||||||
: TemaApp.colorAcento,
|
: TemaApp.colorAcento,
|
||||||
),
|
),
|
||||||
Transform.translate(
|
const SizedBox(height: 12),
|
||||||
offset: const Offset(0, -18),
|
Column(
|
||||||
child: Column(
|
children: [
|
||||||
children: [
|
if (_progreso == null)
|
||||||
if (_progreso == null)
|
const _TarjetaRecompensaCargando()
|
||||||
const _TarjetaRecompensaCargando()
|
else
|
||||||
else
|
_TarjetaProgresoGamificacion(progreso: _progreso!),
|
||||||
_TarjetaProgresoGamificacion(progreso: _progreso!),
|
const SizedBox(height: 18),
|
||||||
const SizedBox(height: 18),
|
_TarjetaSecreto(
|
||||||
_TarjetaSecreto(
|
palabra: partida.palabraSecreta,
|
||||||
palabra: partida.palabraSecreta,
|
categoria: BancoPalabras.nombreBonitoCategoria(
|
||||||
categoria: BancoPalabras.nombreBonitoCategoria(
|
partida.categoriaReal,
|
||||||
partida.categoriaReal,
|
l10n,
|
||||||
l10n,
|
|
||||||
),
|
|
||||||
),
|
),
|
||||||
const SizedBox(height: 18),
|
),
|
||||||
_TarjetaImpostores(
|
const SizedBox(height: 18),
|
||||||
titulo: impostores.length == 1
|
_TarjetaImpostores(
|
||||||
? l10n.theImpostorWas
|
titulo: impostores.length == 1
|
||||||
: l10n.theImpostorsWere,
|
? l10n.theImpostorWas
|
||||||
impostores: impostores,
|
: l10n.theImpostorsWere,
|
||||||
),
|
impostores: impostores,
|
||||||
const SizedBox(height: 18),
|
),
|
||||||
if (partida.historialVotaciones.isNotEmpty)
|
const SizedBox(height: 18),
|
||||||
_TarjetaHistorialVotos(partida: partida, l10n: l10n),
|
if (partida.historialVotaciones.isNotEmpty)
|
||||||
const SizedBox(height: 24),
|
_TarjetaHistorialVotos(partida: partida, l10n: l10n),
|
||||||
_BotonesFinPartida(
|
const SizedBox(height: 24),
|
||||||
estado: estado,
|
_BotonesFinPartida(
|
||||||
onPrincipal: () async {
|
estado: estado,
|
||||||
await context.read<ServicioNearby>().desconectar();
|
onPrincipal: () async {
|
||||||
estado.limpiar();
|
await context.read<ServicioNearby>().desconectar();
|
||||||
if (!context.mounted) return;
|
estado.limpiar();
|
||||||
Navigator.pushAndRemoveUntil(
|
if (!context.mounted) return;
|
||||||
context,
|
Navigator.pushAndRemoveUntil(
|
||||||
MaterialPageRoute(
|
context,
|
||||||
builder: (_) => const PantallaPrincipal(),
|
MaterialPageRoute(
|
||||||
),
|
builder: (_) => const PantallaPrincipal(),
|
||||||
(route) => false,
|
),
|
||||||
);
|
(route) => false,
|
||||||
},
|
);
|
||||||
),
|
},
|
||||||
const SizedBox(height: 16),
|
),
|
||||||
],
|
const SizedBox(height: 16),
|
||||||
),
|
],
|
||||||
),
|
),
|
||||||
],
|
],
|
||||||
),
|
),
|
||||||
@@ -231,7 +229,7 @@ class _HeroResultado extends StatelessWidget {
|
|||||||
alignment: Alignment.center,
|
alignment: Alignment.center,
|
||||||
children: [
|
children: [
|
||||||
SizedBox(
|
SizedBox(
|
||||||
height: 420,
|
height: 548,
|
||||||
width: double.infinity,
|
width: double.infinity,
|
||||||
child: CustomPaint(painter: _HeroCinematicoPainter(color: color)),
|
child: CustomPaint(painter: _HeroCinematicoPainter(color: color)),
|
||||||
),
|
),
|
||||||
@@ -267,7 +265,7 @@ class _HeroResultado extends StatelessWidget {
|
|||||||
alignment: Alignment.center,
|
alignment: Alignment.center,
|
||||||
children: [
|
children: [
|
||||||
Image.asset(
|
Image.asset(
|
||||||
'assets/ui/generated/final_rewards/cinematic_burst.png',
|
'assets/ui/generated/final_rewards/cinematic_burst.webp',
|
||||||
width: 260,
|
width: 260,
|
||||||
height: 260,
|
height: 260,
|
||||||
fit: BoxFit.contain,
|
fit: BoxFit.contain,
|
||||||
@@ -310,17 +308,22 @@ class _HeroResultado extends StatelessWidget {
|
|||||||
)
|
)
|
||||||
.shimmer(delay: 700.ms, duration: 1500.ms),
|
.shimmer(delay: 700.ms, duration: 1500.ms),
|
||||||
const SizedBox(height: 12),
|
const SizedBox(height: 12),
|
||||||
Text(
|
Padding(
|
||||||
'$apertura$tituloLimpio!',
|
padding: const EdgeInsets.symmetric(horizontal: 16),
|
||||||
textAlign: TextAlign.center,
|
child: Text(
|
||||||
style: Theme.of(context).textTheme.headlineMedium?.copyWith(
|
'$apertura$tituloLimpio!',
|
||||||
color: color,
|
maxLines: 2,
|
||||||
fontSize: 34,
|
overflow: TextOverflow.ellipsis,
|
||||||
fontWeight: FontWeight.w900,
|
textAlign: TextAlign.center,
|
||||||
letterSpacing: 1.2,
|
style: Theme.of(context).textTheme.headlineMedium?.copyWith(
|
||||||
shadows: [
|
color: color,
|
||||||
Shadow(color: color.withValues(alpha: 0.90), blurRadius: 24),
|
fontSize: 32,
|
||||||
],
|
fontWeight: FontWeight.w900,
|
||||||
|
letterSpacing: 1.0,
|
||||||
|
shadows: [
|
||||||
|
Shadow(color: color.withValues(alpha: 0.90), blurRadius: 24),
|
||||||
|
],
|
||||||
|
),
|
||||||
),
|
),
|
||||||
).animate().fadeIn(delay: 180.ms).slideY(begin: 0.25),
|
).animate().fadeIn(delay: 180.ms).slideY(begin: 0.25),
|
||||||
],
|
],
|
||||||
@@ -730,7 +733,7 @@ class _MedallaDesbloqueada extends StatelessWidget {
|
|||||||
alignment: Alignment.center,
|
alignment: Alignment.center,
|
||||||
children: [
|
children: [
|
||||||
Image.asset(
|
Image.asset(
|
||||||
'assets/rewards/medal_unlock_burst.png',
|
'assets/rewards/medal_unlock_burst.webp',
|
||||||
width: 82,
|
width: 82,
|
||||||
height: 82,
|
height: 82,
|
||||||
fit: BoxFit.cover,
|
fit: BoxFit.cover,
|
||||||
@@ -943,30 +946,22 @@ class _BotonesFinPartida extends StatelessWidget {
|
|||||||
final l10n = AppLocalizations.of(context)!;
|
final l10n = AppLocalizations.of(context)!;
|
||||||
return Column(
|
return Column(
|
||||||
children: [
|
children: [
|
||||||
SizedBox(
|
BotonFarolero(
|
||||||
width: double.infinity,
|
texto: l10n.rematch,
|
||||||
height: 56,
|
icono: Icons.replay,
|
||||||
child: ElevatedButton.icon(
|
onPressed: () {
|
||||||
onPressed: () {
|
estado.revancha();
|
||||||
estado.revancha();
|
Navigator.pushReplacement(
|
||||||
Navigator.pushReplacement(
|
context,
|
||||||
context,
|
MaterialPageRoute(builder: (_) => const PantallaVerPalabra()),
|
||||||
MaterialPageRoute(builder: (_) => const PantallaVerPalabra()),
|
);
|
||||||
);
|
},
|
||||||
},
|
|
||||||
icon: const Icon(Icons.replay),
|
|
||||||
label: Text(l10n.rematch),
|
|
||||||
),
|
|
||||||
),
|
),
|
||||||
const SizedBox(height: 12),
|
const SizedBox(height: 12),
|
||||||
SizedBox(
|
BotonFarolero.oscuro(
|
||||||
width: double.infinity,
|
texto: l10n.mainMenu,
|
||||||
height: 56,
|
icono: Icons.home,
|
||||||
child: OutlinedButton.icon(
|
onPressed: onPrincipal,
|
||||||
onPressed: onPrincipal,
|
|
||||||
icon: const Icon(Icons.home),
|
|
||||||
label: Text(l10n.mainMenu),
|
|
||||||
),
|
|
||||||
),
|
),
|
||||||
],
|
],
|
||||||
);
|
);
|
||||||
|
|||||||
@@ -209,24 +209,20 @@ class _PantallaFinPartidaOnlineState extends State<PantallaFinPartidaOnline> {
|
|||||||
),
|
),
|
||||||
),
|
),
|
||||||
const SizedBox(height: 24),
|
const SizedBox(height: 24),
|
||||||
SizedBox(
|
BotonFarolero.oscuro(
|
||||||
width: double.infinity,
|
texto: l10n.mainMenu,
|
||||||
height: 56,
|
icono: Icons.home,
|
||||||
child: OutlinedButton.icon(
|
onPressed: () async {
|
||||||
onPressed: () async {
|
await context.read<ServicioNearby>().desconectar();
|
||||||
await context.read<ServicioNearby>().desconectar();
|
if (!context.mounted) return;
|
||||||
if (!context.mounted) return;
|
Navigator.pushAndRemoveUntil(
|
||||||
Navigator.pushAndRemoveUntil(
|
context,
|
||||||
context,
|
MaterialPageRoute(
|
||||||
MaterialPageRoute(
|
builder: (_) => const PantallaPrincipal(),
|
||||||
builder: (_) => const PantallaPrincipal(),
|
),
|
||||||
),
|
(route) => false,
|
||||||
(route) => false,
|
);
|
||||||
);
|
},
|
||||||
},
|
|
||||||
icon: const Icon(Icons.home),
|
|
||||||
label: Text(l10n.mainMenu),
|
|
||||||
),
|
|
||||||
),
|
),
|
||||||
],
|
],
|
||||||
),
|
),
|
||||||
@@ -277,7 +273,7 @@ class _ResultadoOnlineHero extends StatelessWidget {
|
|||||||
child: Column(
|
child: Column(
|
||||||
children: [
|
children: [
|
||||||
Image.asset(
|
Image.asset(
|
||||||
'assets/ui/generated/final_rewards/cinematic_burst.png',
|
'assets/ui/generated/final_rewards/cinematic_burst.webp',
|
||||||
height: 250,
|
height: 250,
|
||||||
fit: BoxFit.contain,
|
fit: BoxFit.contain,
|
||||||
opacity: const AlwaysStoppedAnimation(0.95),
|
opacity: const AlwaysStoppedAnimation(0.95),
|
||||||
|
|||||||
@@ -80,7 +80,7 @@ class _PantallaLobbyHostState extends State<PantallaLobbyHost> {
|
|||||||
Positioned.fill(
|
Positioned.fill(
|
||||||
child: IgnorePointer(
|
child: IgnorePointer(
|
||||||
child: Image.asset(
|
child: Image.asset(
|
||||||
'assets/ui/generated/join_lobby/qr_frame.png',
|
'assets/ui/generated/join_lobby/qr_frame.webp',
|
||||||
fit: BoxFit.contain,
|
fit: BoxFit.contain,
|
||||||
),
|
),
|
||||||
),
|
),
|
||||||
@@ -418,7 +418,7 @@ class _LobbySignalArt extends StatelessWidget {
|
|||||||
height: 104,
|
height: 104,
|
||||||
width: double.infinity,
|
width: double.infinity,
|
||||||
child: Image.asset(
|
child: Image.asset(
|
||||||
'assets/ui/generated/join_lobby/signal_art.png',
|
'assets/ui/generated/join_lobby/signal_art.webp',
|
||||||
fit: BoxFit.contain,
|
fit: BoxFit.contain,
|
||||||
opacity: const AlwaysStoppedAnimation(0.90),
|
opacity: const AlwaysStoppedAnimation(0.90),
|
||||||
),
|
),
|
||||||
|
|||||||
@@ -31,7 +31,7 @@ class PantallaPrincipal extends StatelessWidget {
|
|||||||
children: [
|
children: [
|
||||||
Positioned.fill(
|
Positioned.fill(
|
||||||
child: Image.asset(
|
child: Image.asset(
|
||||||
'assets/ui/generated/main/main_atmosphere_bg.png',
|
'assets/ui/generated/main/main_atmosphere_bg.webp',
|
||||||
fit: BoxFit.cover,
|
fit: BoxFit.cover,
|
||||||
alignment: Alignment.center,
|
alignment: Alignment.center,
|
||||||
),
|
),
|
||||||
@@ -291,16 +291,16 @@ class _HeroInicioPremium extends StatelessWidget {
|
|||||||
children: [
|
children: [
|
||||||
Positioned.fill(
|
Positioned.fill(
|
||||||
child: Image.asset(
|
child: Image.asset(
|
||||||
'assets/ui/premium/lantern_radial_glow.png',
|
'assets/ui/generated/main/main_lantern_hero.webp',
|
||||||
fit: BoxFit.contain,
|
fit: BoxFit.contain,
|
||||||
opacity: const AlwaysStoppedAnimation(0.48),
|
opacity: const AlwaysStoppedAnimation(0.18),
|
||||||
),
|
),
|
||||||
),
|
),
|
||||||
Column(
|
Column(
|
||||||
mainAxisSize: MainAxisSize.min,
|
mainAxisSize: MainAxisSize.min,
|
||||||
children: [
|
children: [
|
||||||
Image.asset(
|
Image.asset(
|
||||||
'assets/ui/generated/main/main_lantern_hero.png',
|
'assets/ui/generated/main/main_lantern_hero.webp',
|
||||||
width: heroSize,
|
width: heroSize,
|
||||||
height: heroSize,
|
height: heroSize,
|
||||||
fit: BoxFit.contain,
|
fit: BoxFit.contain,
|
||||||
@@ -455,7 +455,7 @@ class _BotonInicioPremium extends StatelessWidget {
|
|||||||
children: [
|
children: [
|
||||||
Positioned.fill(
|
Positioned.fill(
|
||||||
child: Image.asset(
|
child: Image.asset(
|
||||||
'assets/ui/premium/card_sheen_overlay.png',
|
'assets/ui/generated/main/main_cta_frame.webp',
|
||||||
fit: BoxFit.cover,
|
fit: BoxFit.cover,
|
||||||
opacity: AlwaysStoppedAnimation(hero ? 0.20 : 0.14),
|
opacity: AlwaysStoppedAnimation(hero ? 0.20 : 0.14),
|
||||||
),
|
),
|
||||||
|
|||||||
@@ -283,68 +283,50 @@ class _PantallaResultadoState extends State<PantallaResultado>
|
|||||||
final partida = estado.partida;
|
final partida = estado.partida;
|
||||||
if (partida == null) return const SizedBox.shrink();
|
if (partida == null) return const SizedBox.shrink();
|
||||||
|
|
||||||
// Comprobar si la partida terminó
|
|
||||||
final finPartida = estado.comprobarFinPartida();
|
final finPartida = estado.comprobarFinPartida();
|
||||||
|
|
||||||
if (finPartida) {
|
if (finPartida) {
|
||||||
return SizedBox(
|
return BotonFarolero(
|
||||||
width: double.infinity,
|
texto: l10n.seeEndResult,
|
||||||
height: 56,
|
icono: Icons.emoji_events,
|
||||||
child: ElevatedButton.icon(
|
onPressed: () {
|
||||||
onPressed: () {
|
Navigator.pushReplacement(
|
||||||
Navigator.pushReplacement(
|
context,
|
||||||
context,
|
MaterialPageRoute(builder: (_) => const PantallaFinPartida()),
|
||||||
MaterialPageRoute(builder: (_) => const PantallaFinPartida()),
|
);
|
||||||
);
|
},
|
||||||
},
|
|
||||||
icon: const Icon(Icons.emoji_events),
|
|
||||||
label: Text(l10n.seeEndResult),
|
|
||||||
),
|
|
||||||
);
|
);
|
||||||
}
|
}
|
||||||
|
|
||||||
// Si era impostor, puede intentar adivinar
|
|
||||||
if (widget.resultado.eraImpostor) {
|
if (widget.resultado.eraImpostor) {
|
||||||
return Column(
|
return Column(
|
||||||
children: [
|
children: [
|
||||||
SizedBox(
|
BotonFarolero.oscuro(
|
||||||
width: double.infinity,
|
texto: l10n.impostorGuessWord,
|
||||||
height: 56,
|
icono: Icons.gps_fixed,
|
||||||
child: OutlinedButton.icon(
|
onPressed: () {
|
||||||
onPressed: () {
|
Navigator.pushReplacement(
|
||||||
Navigator.pushReplacement(
|
context,
|
||||||
context,
|
MaterialPageRoute(
|
||||||
MaterialPageRoute(
|
builder: (_) => const PantallaAdivinanza(),
|
||||||
builder: (_) => const PantallaAdivinanza(),
|
),
|
||||||
),
|
);
|
||||||
);
|
},
|
||||||
},
|
|
||||||
icon: const Text('🎯', style: TextStyle(fontSize: 18)),
|
|
||||||
label: Text(l10n.impostorGuessWord),
|
|
||||||
),
|
|
||||||
),
|
),
|
||||||
const SizedBox(height: 12),
|
const SizedBox(height: 12),
|
||||||
SizedBox(
|
BotonFarolero(
|
||||||
width: double.infinity,
|
texto: l10n.nextRound,
|
||||||
height: 56,
|
icono: Icons.skip_next,
|
||||||
child: ElevatedButton.icon(
|
onPressed: () => _siguienteRonda(context, estado),
|
||||||
onPressed: () => _siguienteRonda(context, estado),
|
|
||||||
icon: const Icon(Icons.skip_next),
|
|
||||||
label: Text(l10n.nextRound),
|
|
||||||
),
|
|
||||||
),
|
),
|
||||||
],
|
],
|
||||||
);
|
);
|
||||||
}
|
}
|
||||||
|
|
||||||
return SizedBox(
|
return BotonFarolero(
|
||||||
width: double.infinity,
|
texto: l10n.nextRound,
|
||||||
height: 56,
|
icono: Icons.skip_next,
|
||||||
child: ElevatedButton.icon(
|
onPressed: () => _siguienteRonda(context, estado),
|
||||||
onPressed: () => _siguienteRonda(context, estado),
|
|
||||||
icon: const Icon(Icons.skip_next),
|
|
||||||
label: Text(l10n.nextRound),
|
|
||||||
),
|
|
||||||
);
|
);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
@@ -33,7 +33,7 @@ class PantallaSeleccionModoJuego extends StatelessWidget {
|
|||||||
).animate().fadeIn(duration: 320.ms).slideY(begin: -0.12),
|
).animate().fadeIn(duration: 320.ms).slideY(begin: -0.12),
|
||||||
const SizedBox(height: 34),
|
const SizedBox(height: 34),
|
||||||
_ModoCard(
|
_ModoCard(
|
||||||
marcoAsset: 'assets/ui/generated/mode/mode_single_card_frame.png',
|
marcoAsset: 'assets/ui/generated/mode/mode_single_card_frame.webp',
|
||||||
icono: Icons.phone_android_rounded,
|
icono: Icons.phone_android_rounded,
|
||||||
titulo: l10n.singleDevice,
|
titulo: l10n.singleDevice,
|
||||||
subtitulo: l10n.singleDeviceSubtitle,
|
subtitulo: l10n.singleDeviceSubtitle,
|
||||||
@@ -50,7 +50,7 @@ class PantallaSeleccionModoJuego extends StatelessWidget {
|
|||||||
).animate().fadeIn(delay: 120.ms).slideX(begin: -0.08),
|
).animate().fadeIn(delay: 120.ms).slideX(begin: -0.08),
|
||||||
const SizedBox(height: 16),
|
const SizedBox(height: 16),
|
||||||
_ModoCard(
|
_ModoCard(
|
||||||
marcoAsset: 'assets/ui/generated/mode/mode_multi_card_frame.png',
|
marcoAsset: 'assets/ui/generated/mode/mode_multi_card_frame.webp',
|
||||||
icono: Icons.devices_rounded,
|
icono: Icons.devices_rounded,
|
||||||
titulo: l10n.multiDevice,
|
titulo: l10n.multiDevice,
|
||||||
subtitulo: l10n.multiDeviceSubtitle,
|
subtitulo: l10n.multiDeviceSubtitle,
|
||||||
@@ -93,7 +93,7 @@ class _ModoHero extends StatelessWidget {
|
|||||||
SizedBox(
|
SizedBox(
|
||||||
height: 230,
|
height: 230,
|
||||||
child: Image.asset(
|
child: Image.asset(
|
||||||
'assets/ui/generated/mode/mode_duel_hero.png',
|
'assets/ui/generated/mode/mode_duel_hero.webp',
|
||||||
fit: BoxFit.contain,
|
fit: BoxFit.contain,
|
||||||
opacity: const AlwaysStoppedAnimation(0.95),
|
opacity: const AlwaysStoppedAnimation(0.95),
|
||||||
),
|
),
|
||||||
@@ -186,13 +186,6 @@ class _ModoCard extends StatelessWidget {
|
|||||||
opacity: AlwaysStoppedAnimation(destacado ? 0.22 : 0.18),
|
opacity: AlwaysStoppedAnimation(destacado ? 0.22 : 0.18),
|
||||||
),
|
),
|
||||||
),
|
),
|
||||||
Positioned.fill(
|
|
||||||
child: Image.asset(
|
|
||||||
'assets/ui/premium/card_sheen_overlay.png',
|
|
||||||
fit: BoxFit.cover,
|
|
||||||
opacity: AlwaysStoppedAnimation(destacado ? 0.28 : 0.18),
|
|
||||||
),
|
|
||||||
),
|
|
||||||
Padding(
|
Padding(
|
||||||
padding: const EdgeInsets.fromLTRB(18, 18, 14, 18),
|
padding: const EdgeInsets.fromLTRB(18, 18, 14, 18),
|
||||||
child: Row(
|
child: Row(
|
||||||
|
|||||||
@@ -942,7 +942,7 @@ class _JoinLobbySignalArt extends StatelessWidget {
|
|||||||
height: height,
|
height: height,
|
||||||
width: double.infinity,
|
width: double.infinity,
|
||||||
child: Image.asset(
|
child: Image.asset(
|
||||||
'assets/ui/generated/join_lobby/signal_art.png',
|
'assets/ui/generated/join_lobby/signal_art.webp',
|
||||||
fit: BoxFit.contain,
|
fit: BoxFit.contain,
|
||||||
opacity: const AlwaysStoppedAnimation(0.94),
|
opacity: const AlwaysStoppedAnimation(0.94),
|
||||||
),
|
),
|
||||||
|
|||||||
@@ -114,7 +114,7 @@ class _PantallaVotacionState extends State<PantallaVotacion> {
|
|||||||
subtitulo: l10n.selectOnePlayer,
|
subtitulo: l10n.selectOnePlayer,
|
||||||
color: TemaApp.colorAcento,
|
color: TemaApp.colorAcento,
|
||||||
trailing: Image.asset(
|
trailing: Image.asset(
|
||||||
'assets/ui/premium/vote_danger_glow.png',
|
'assets/ui/generated/meta/result_verdict_art.webp',
|
||||||
width: 42,
|
width: 42,
|
||||||
height: 42,
|
height: 42,
|
||||||
opacity: const AlwaysStoppedAnimation(0.64),
|
opacity: const AlwaysStoppedAnimation(0.64),
|
||||||
|
|||||||
@@ -141,7 +141,7 @@ class _PantallaVotacionClienteState extends State<PantallaVotacionCliente> {
|
|||||||
subtitulo: l10n.selectOnePlayer,
|
subtitulo: l10n.selectOnePlayer,
|
||||||
color: TemaApp.colorAcento,
|
color: TemaApp.colorAcento,
|
||||||
trailing: Image.asset(
|
trailing: Image.asset(
|
||||||
'assets/ui/premium/vote_danger_glow.png',
|
'assets/ui/generated/meta/result_verdict_art.webp',
|
||||||
width: 42,
|
width: 42,
|
||||||
height: 42,
|
height: 42,
|
||||||
opacity: const AlwaysStoppedAnimation(0.64),
|
opacity: const AlwaysStoppedAnimation(0.64),
|
||||||
|
|||||||
@@ -22,45 +22,21 @@ class FondoFarolero extends StatelessWidget {
|
|||||||
decoration: const BoxDecoration(gradient: TemaApp.gradienteFondo),
|
decoration: const BoxDecoration(gradient: TemaApp.gradienteFondo),
|
||||||
child: Stack(
|
child: Stack(
|
||||||
children: [
|
children: [
|
||||||
if (intenso)
|
Positioned.fill(
|
||||||
Positioned.fill(
|
child: IgnorePointer(
|
||||||
child: IgnorePointer(
|
child: Image.asset(
|
||||||
child: Image.asset(
|
'assets/ui/generated/shared/screen_atmosphere_bg.webp',
|
||||||
'assets/ui/generated/gameplay/gameplay_atmosphere_bg.png',
|
fit: BoxFit.cover,
|
||||||
fit: BoxFit.cover,
|
opacity: AlwaysStoppedAnimation(intenso ? 0.76 : 0.48),
|
||||||
opacity: const AlwaysStoppedAnimation(0.30),
|
filterQuality: FilterQuality.high,
|
||||||
filterQuality: FilterQuality.high,
|
errorBuilder: (context, error, stackTrace) =>
|
||||||
errorBuilder: (context, error, stackTrace) =>
|
const SizedBox.shrink(),
|
||||||
const SizedBox.shrink(),
|
|
||||||
),
|
|
||||||
),
|
),
|
||||||
),
|
),
|
||||||
|
),
|
||||||
Positioned.fill(
|
Positioned.fill(
|
||||||
child: CustomPaint(painter: _FondoFaroleroPainter(intenso: intenso)),
|
child: CustomPaint(painter: _FondoFaroleroPainter(intenso: intenso)),
|
||||||
),
|
),
|
||||||
Positioned(
|
|
||||||
top: intenso ? -180 : -140,
|
|
||||||
left: -220,
|
|
||||||
right: -220,
|
|
||||||
child: IgnorePointer(
|
|
||||||
child: Image.asset(
|
|
||||||
'assets/ui/premium/lantern_radial_glow.png',
|
|
||||||
height: intenso ? 720 : 560,
|
|
||||||
fit: BoxFit.contain,
|
|
||||||
opacity: AlwaysStoppedAnimation(intenso ? 0.56 : 0.34),
|
|
||||||
),
|
|
||||||
),
|
|
||||||
),
|
|
||||||
Positioned.fill(
|
|
||||||
child: IgnorePointer(
|
|
||||||
child: Image.asset(
|
|
||||||
'assets/ui/premium/sparks_overlay.png',
|
|
||||||
fit: BoxFit.cover,
|
|
||||||
repeat: ImageRepeat.repeat,
|
|
||||||
opacity: AlwaysStoppedAnimation(intenso ? 0.38 : 0.22),
|
|
||||||
),
|
|
||||||
),
|
|
||||||
),
|
|
||||||
Positioned.fill(child: child),
|
Positioned.fill(child: child),
|
||||||
],
|
],
|
||||||
),
|
),
|
||||||
@@ -94,13 +70,6 @@ class PanelFarolero extends StatelessWidget {
|
|||||||
borderRadius: BorderRadius.circular(14),
|
borderRadius: BorderRadius.circular(14),
|
||||||
child: Stack(
|
child: Stack(
|
||||||
children: [
|
children: [
|
||||||
Positioned.fill(
|
|
||||||
child: Image.asset(
|
|
||||||
'assets/ui/premium/card_sheen_overlay.png',
|
|
||||||
fit: BoxFit.cover,
|
|
||||||
opacity: const AlwaysStoppedAnimation(0.26),
|
|
||||||
),
|
|
||||||
),
|
|
||||||
Padding(padding: padding, child: child),
|
Padding(padding: padding, child: child),
|
||||||
],
|
],
|
||||||
),
|
),
|
||||||
@@ -348,14 +317,19 @@ class BotonFarolero extends StatelessWidget {
|
|||||||
alignment: Alignment.center,
|
alignment: Alignment.center,
|
||||||
children: [
|
children: [
|
||||||
Positioned.fill(
|
Positioned.fill(
|
||||||
child: Image.asset(
|
child: IgnorePointer(
|
||||||
'assets/ui/premium/card_sheen_overlay.png',
|
child: Image.asset(
|
||||||
fit: BoxFit.cover,
|
'assets/ui/generated/main/main_cta_frame.webp',
|
||||||
opacity: const AlwaysStoppedAnimation(0.14),
|
fit: BoxFit.fill,
|
||||||
|
opacity: AlwaysStoppedAnimation(habilitado ? 0.72 : 0.24),
|
||||||
|
filterQuality: FilterQuality.high,
|
||||||
|
errorBuilder: (context, error, stackTrace) =>
|
||||||
|
const SizedBox.shrink(),
|
||||||
|
),
|
||||||
),
|
),
|
||||||
),
|
),
|
||||||
Padding(
|
Padding(
|
||||||
padding: const EdgeInsets.symmetric(horizontal: 14, vertical: 12),
|
padding: const EdgeInsets.symmetric(horizontal: 20, vertical: 14),
|
||||||
child: Row(
|
child: Row(
|
||||||
crossAxisAlignment: CrossAxisAlignment.center,
|
crossAxisAlignment: CrossAxisAlignment.center,
|
||||||
children: [
|
children: [
|
||||||
@@ -415,35 +389,35 @@ class ArteGameplayFarolero extends StatelessWidget {
|
|||||||
this.height = 128,
|
this.height = 128,
|
||||||
this.opacity = 0.92,
|
this.opacity = 0.92,
|
||||||
this.padding = EdgeInsets.zero,
|
this.padding = EdgeInsets.zero,
|
||||||
}) : assetPath = 'assets/ui/generated/gameplay/gameplay_phase_emblem.png';
|
}) : assetPath = 'assets/ui/generated/gameplay/gameplay_phase_emblem.webp';
|
||||||
|
|
||||||
const ArteGameplayFarolero.notas({
|
const ArteGameplayFarolero.notas({
|
||||||
super.key,
|
super.key,
|
||||||
this.height = 150,
|
this.height = 150,
|
||||||
this.opacity = 0.94,
|
this.opacity = 0.94,
|
||||||
this.padding = EdgeInsets.zero,
|
this.padding = EdgeInsets.zero,
|
||||||
}) : assetPath = 'assets/ui/generated/gameplay/notes_strategy_art.png';
|
}) : assetPath = 'assets/ui/generated/gameplay/notes_strategy_art.webp';
|
||||||
|
|
||||||
const ArteGameplayFarolero.ajustes({
|
const ArteGameplayFarolero.ajustes({
|
||||||
super.key,
|
super.key,
|
||||||
this.height = 150,
|
this.height = 150,
|
||||||
this.opacity = 0.94,
|
this.opacity = 0.94,
|
||||||
this.padding = EdgeInsets.zero,
|
this.padding = EdgeInsets.zero,
|
||||||
}) : assetPath = 'assets/ui/generated/meta/settings_profile_art.png';
|
}) : assetPath = 'assets/ui/generated/meta/settings_profile_art.webp';
|
||||||
|
|
||||||
const ArteGameplayFarolero.historial({
|
const ArteGameplayFarolero.historial({
|
||||||
super.key,
|
super.key,
|
||||||
this.height = 150,
|
this.height = 150,
|
||||||
this.opacity = 0.94,
|
this.opacity = 0.94,
|
||||||
this.padding = EdgeInsets.zero,
|
this.padding = EdgeInsets.zero,
|
||||||
}) : assetPath = 'assets/ui/generated/meta/history_ledger_art.png';
|
}) : assetPath = 'assets/ui/generated/meta/history_ledger_art.webp';
|
||||||
|
|
||||||
const ArteGameplayFarolero.resultado({
|
const ArteGameplayFarolero.resultado({
|
||||||
super.key,
|
super.key,
|
||||||
this.height = 150,
|
this.height = 150,
|
||||||
this.opacity = 0.94,
|
this.opacity = 0.94,
|
||||||
this.padding = EdgeInsets.zero,
|
this.padding = EdgeInsets.zero,
|
||||||
}) : assetPath = 'assets/ui/generated/meta/result_verdict_art.png';
|
}) : assetPath = 'assets/ui/generated/meta/result_verdict_art.webp';
|
||||||
|
|
||||||
@override
|
@override
|
||||||
Widget build(BuildContext context) {
|
Widget build(BuildContext context) {
|
||||||
@@ -538,7 +512,7 @@ class TarjetaPalabraFarolero extends StatelessWidget {
|
|||||||
children: [
|
children: [
|
||||||
Positioned.fill(
|
Positioned.fill(
|
||||||
child: Image.asset(
|
child: Image.asset(
|
||||||
'assets/ui/generated/gameplay/gameplay_phase_emblem.png',
|
'assets/ui/generated/gameplay/gameplay_phase_emblem.webp',
|
||||||
fit: BoxFit.contain,
|
fit: BoxFit.contain,
|
||||||
opacity: const AlwaysStoppedAnimation(0.14),
|
opacity: const AlwaysStoppedAnimation(0.14),
|
||||||
filterQuality: FilterQuality.high,
|
filterQuality: FilterQuality.high,
|
||||||
@@ -546,13 +520,6 @@ class TarjetaPalabraFarolero extends StatelessWidget {
|
|||||||
const SizedBox.shrink(),
|
const SizedBox.shrink(),
|
||||||
),
|
),
|
||||||
),
|
),
|
||||||
Positioned.fill(
|
|
||||||
child: Image.asset(
|
|
||||||
'assets/ui/premium/word_reveal_glow.png',
|
|
||||||
fit: BoxFit.cover,
|
|
||||||
opacity: const AlwaysStoppedAnimation(0.28),
|
|
||||||
),
|
|
||||||
),
|
|
||||||
Text(
|
Text(
|
||||||
palabra.toUpperCase(),
|
palabra.toUpperCase(),
|
||||||
textAlign: TextAlign.center,
|
textAlign: TextAlign.center,
|
||||||
|
|||||||
@@ -99,8 +99,10 @@ class TemaApp {
|
|||||||
foregroundColor: Colors.black,
|
foregroundColor: Colors.black,
|
||||||
disabledBackgroundColor: colorTarjeta,
|
disabledBackgroundColor: colorTarjeta,
|
||||||
disabledForegroundColor: colorTextoSecundario,
|
disabledForegroundColor: colorTextoSecundario,
|
||||||
elevation: 0,
|
elevation: 10,
|
||||||
|
shadowColor: colorNaranja.withValues(alpha: 0.34),
|
||||||
padding: const EdgeInsets.symmetric(horizontal: 24, vertical: 16),
|
padding: const EdgeInsets.symmetric(horizontal: 24, vertical: 16),
|
||||||
|
side: BorderSide(color: colorDorado.withValues(alpha: 0.72)),
|
||||||
shape: RoundedRectangleBorder(borderRadius: BorderRadius.circular(18)),
|
shape: RoundedRectangleBorder(borderRadius: BorderRadius.circular(18)),
|
||||||
textStyle: GoogleFonts.oswald(
|
textStyle: GoogleFonts.oswald(
|
||||||
fontWeight: FontWeight.w700,
|
fontWeight: FontWeight.w700,
|
||||||
@@ -112,7 +114,8 @@ class TemaApp {
|
|||||||
outlinedButtonTheme: OutlinedButtonThemeData(
|
outlinedButtonTheme: OutlinedButtonThemeData(
|
||||||
style: OutlinedButton.styleFrom(
|
style: OutlinedButton.styleFrom(
|
||||||
foregroundColor: colorTexto,
|
foregroundColor: colorTexto,
|
||||||
side: const BorderSide(color: colorBorde),
|
backgroundColor: colorSuperficie.withValues(alpha: 0.70),
|
||||||
|
side: BorderSide(color: colorDorado.withValues(alpha: 0.52)),
|
||||||
padding: const EdgeInsets.symmetric(horizontal: 24, vertical: 16),
|
padding: const EdgeInsets.symmetric(horizontal: 24, vertical: 16),
|
||||||
shape: RoundedRectangleBorder(borderRadius: BorderRadius.circular(18)),
|
shape: RoundedRectangleBorder(borderRadius: BorderRadius.circular(18)),
|
||||||
textStyle: GoogleFonts.oswald(
|
textStyle: GoogleFonts.oswald(
|
||||||
|
|||||||
@@ -38,7 +38,6 @@ flutter:
|
|||||||
- assets/avatars/
|
- assets/avatars/
|
||||||
- assets/medals/
|
- assets/medals/
|
||||||
- assets/rewards/
|
- assets/rewards/
|
||||||
- assets/ui/premium/
|
|
||||||
- assets/ui/generated/
|
- assets/ui/generated/
|
||||||
- assets/ui/generated/shared/
|
- assets/ui/generated/shared/
|
||||||
- assets/ui/generated/main/
|
- assets/ui/generated/main/
|
||||||
|
|||||||