Compare commits

...

6 Commits

Author SHA1 Message Date
FreeTLab 5697c2a5a1 A ver si compila y publica en main
Build & Deploy Farolero / Análisis de código (push) Failing after 15s
Build & Deploy Farolero / Build APK + AAB release (push) Has been skipped
2026-05-12 01:11:59 +02:00
FreeTLab 7ee8c6ae2f Merge branch 'main' of https://git.freetimelab.es/FreeTLab/farolero 2026-05-12 01:11:02 +02:00
FreeTLab 1885c85de9 uso de imágenes y eliminación de innecesarias 2026-05-12 01:09:05 +02:00
FreeTLab a055ed808c más iconos 2026-05-12 00:44:33 +02:00
FreeTLab 4334e06b04 multiples iconografías 2026-05-12 00:40:40 +02:00
FreeTLab be255d5ea3 algunos iconos PRO 2026-05-12 00:11:43 +02:00
53 changed files with 599 additions and 51 deletions
Binary file not shown.

After

Width:  |  Height:  |  Size: 8.2 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 10 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 8.6 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 8.1 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 8.8 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 8.1 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 8.2 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 7.5 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 9.8 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 9.8 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 9.0 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 8.5 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 12 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 9.3 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 7.2 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 11 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 8.3 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 8.6 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 26 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 48 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 285 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 3.0 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 11 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 38 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 85 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 70 KiB

+84
View File
@@ -0,0 +1,84 @@
# Inventario de iconos/assets premium pendientes — Farolero
Criterio: sustituir iconos Material/emoji/texto que tengan peso visual por ilustraciones premium transparentes, manteniendo texto/estado como Flutter real. Objetivo: assets WebP/PNG con alpha, tamaño ajustado al render real y peso controlado.
## Resumen técnico
- Assets totales de imagen: 122.
- Peso por carpetas: `assets/avatars` ~9.16 MB, `assets/ui` ~2.07 MB, `assets/app_icon` ~1.54 MB, `assets/medals` ~0.35 MB, `assets/rewards` ~0.18 MB.
- Assets no referenciados literalmente en código/pubspec: `assets/app_icon/farolero_app_icon.png` y `assets/ui/premium/*`.
- `assets/ui/premium/*` debe eliminarse del runtime si no se usa: son glows/overlays antiguos y de baja calidad frente al sistema `assets/ui/generated/*`.
- Se detectan ~190 usos de `Icons.*`; no todos deben sustituirse. Los de navegación/cierre/campos pueden seguir vectoriales. Los de acciones principales, fases, resultados y notas sí deberían ser assets generados.
## Reglas de tamaño/peso propuestas
| Tipo | Tamaño fuente generado | Tamaño runtime | Peso objetivo |
| --- | ---: | ---: | ---: |
| Icono de botón/acción | 512x512 | 128x128 o 160x160 WebP alpha | 12-35 KB |
| Icono de fase/tarjeta | 768x768 | 192x192 o 256x256 WebP alpha | 35-90 KB |
| Hero de pantalla | 1024x1024 | 512x512 WebP alpha | 70-160 KB |
| Fondo pantalla | 1440x2560 fuente | 900x1599 WebP/JPEG | 80-180 KB |
| Marco QR | 512x512 fuente | 192x192/256x256 WebP alpha | 40-100 KB |
| App icon | 1024x1024 PNG fuente | mantener fuente + generar mipmaps | fuente puede pesar 1-2 MB |
## Prioridad A — reemplazar ya
| Uso visual | Iconos/líneas detectadas | Asset recomendado | Runtime recomendado | Peso objetivo | Motivo |
| --- | --- | --- | --- | --- | --- |
| Notas | `Icons.edit_note`, `Icons.note`, `Icons.save` en `pantalla_debate.dart`, `pantalla_notas*.dart`, `pantalla_gestor_host.dart`, `pantalla_resultado_online.dart`, `pantalla_fin_partida_online.dart` | `assets/ui/generated/actions/action_notes_quill.webp` | 160x160 WebP alpha | 20-45 KB | El botón de notas se ve pobre; debe ser cuaderno/pergamino/pluma/farol premium. |
| Votación | `Icons.how_to_vote`, `Icons.person_search`, `Icons.gps_fixed` en voto/resultado/reglas | `assets/ui/generated/actions/action_vote_mask.webp` | 160x160 o 192x192 WebP alpha | 25-60 KB | Acción central de juego, ahora parece Material. |
| Ver palabra / revelar | `Icons.visibility`, `Icons.visibility_off`, `Icons.key`, `Icons.lock`, `Icons.search` | `assets/ui/generated/actions/action_reveal_word.webp` | 160x160 WebP alpha | 20-45 KB | Fase clave; debe verse como secreto/farol/carta sellada. |
| Impostor | `Icons.theater_comedy`, `Icons.psychology` | `assets/ui/generated/actions/action_impostor_mask.webp` | 192x192 WebP alpha | 35-75 KB | Se usa mucho y define identidad del juego. |
| Resultado/victoria | `Icons.emoji_events`, `Icons.celebration`, `Icons.mood`, `Icons.sentiment_dissatisfied` | `assets/ui/generated/actions/action_result_trophy.webp` | 192x192 WebP alpha | 35-75 KB | Pantallas de resultado necesitan impacto/gamificación. |
| Fuego/progreso | `Icons.local_fire_department`, emojis de fuego en medallas como fallback | `assets/ui/generated/actions/action_fire_badge.webp` | 160x160 WebP alpha | 20-45 KB | Mantener estética de farol/fuego sin emoji. |
## Prioridad B — reutilizar/generar si queda feo en pantalla
| Uso visual | Iconos/líneas detectadas | Asset recomendado | Runtime recomendado | Peso objetivo | Motivo |
| --- | --- | --- | --- | --- | --- |
| Debate | `Icons.forum`, `Icons.record_voice_over`, `Icons.chat_bubble` | `assets/ui/generated/actions/action_debate_voice.webp` | 160x160 WebP alpha | 20-45 KB | Fase frecuente; puede reutilizarse en reglas y host. |
| Multidispositivo | `Icons.devices`, `Icons.phone_android`, `Icons.bluetooth_searching`, `Icons.wifi_tethering`, `Icons.radar` | reutilizar/mejorar `join_lobby/signal_art.webp` o nuevo `action_multidevice_signal.webp` | 192x192 WebP alpha | 35-80 KB | Hay asset de señal, pero varios botones siguen con iconos Material. |
| Jugadores | `Icons.person`, `Icons.person_add`, `Icons.groups`, `Icons.person_off` | `action_players_token.webp` | 128x128 WebP alpha | 12-35 KB | En listas pequeñas puede bastar vectorial; en CTAs/tarjetas debería ser asset. |
| Historial | `Icons.history_rounded`, `Icons.arrow_forward_ios` | reutilizar `meta/history_ledger_art.webp` | 160x160 WebP alpha | ya existe 130 KB; quizá recomprimir a 70-90 KB | Ya hay asset, pero botones siguen con icono. |
| Ajustes/perfil | `Icons.settings_rounded`, `Icons.edit`, `Icons.alternate_email` | reutilizar `meta/settings_profile_art.webp` | 160x160 WebP alpha | ya existe 124 KB; quizá recomprimir a 60-90 KB | Útil en perfil/configuración. |
| Crear partida | `Icons.category`, `Icons.add`, `Icons.remove_circle_outline`, `Icons.add_circle_outline` | `action_create_game.webp` / reutilizar `create_game_header_art.webp` | 128-192 WebP alpha | 20-70 KB | Pantalla aún básica en varias zonas. |
## Prioridad C — mantener vectorial salvo que sea protagonista
- `Icons.close`, `Icons.arrow_back`, `Icons.chevron_right_rounded`, `Icons.arrow_forward`, `Icons.check`, `Icons.cancel` como controles pequeños pueden seguir vectoriales.
- En botones premium principales, si el icono ocupa mucho protagonismo, conviene usar asset ilustrado.
- En `TextField.prefixIcon`, usar vectorial es aceptable salvo pantallas premium donde el icono sea grande o repetido.
## Assets existentes a reutilizar antes de generar
| Asset | Tamaño | Peso | Estado |
| --- | ---: | ---: | --- |
| `assets/ui/generated/gameplay/notes_strategy_art.webp` | 256x256 | ~126 KB | Bueno como hero de notas; pesado para botón. Generar derivado `action_notes_quill.webp` 128/160 px. |
| `assets/ui/generated/meta/result_verdict_art.webp` | 256x256 | ~129 KB | Bueno para resultado; pesado como icono de botón. Crear derivado 160 px. |
| `assets/ui/generated/gameplay/gameplay_phase_emblem.webp` | 256x256 | ~113 KB | Reutilizable como fase genérica; no sustituye iconos específicos. |
| `assets/ui/generated/join_lobby/signal_art.webp` | 176x88 | ~129 KB | Calidad correcta pero peso alto para tamaño; recomprimir objetivo 45-80 KB. |
| `assets/ui/generated/meta/history_ledger_art.webp` | 256x256 | ~131 KB | Reutilizable; recomprimir si se usa como icono pequeño. |
| `assets/ui/generated/meta/settings_profile_art.webp` | 256x256 | ~124 KB | Reutilizable; recomprimir si se usa como icono pequeño. |
| `assets/ui/generated/create_game/create_game_header_art.webp` | 176x88 | ~122 KB | Peso alto para tamaño; recomprimir o generar iconos derivados. |
## Assets a retirar o no usar como runtime
| Asset/carpeta | Motivo |
| --- | --- |
| `assets/ui/premium/lantern_radial_glow.png` | 1024x1024, 285 KB, no referenciado; glow procedural/antiguo. |
| `assets/ui/premium/vote_danger_glow.png` | no referenciado; reemplazar por asset premium real si hace falta. |
| `assets/ui/premium/word_reveal_glow.png` | no referenciado; reemplazar por asset premium real si hace falta. |
| `assets/ui/premium/corner_orange_glow.png` | no referenciado; placeholder procedural. |
| `assets/ui/premium/timer_ring_glow.png` | no referenciado; si se quiere temporizador premium, generar ilustración específica. |
| `assets/ui/premium/card_sheen_overlay.png` | no referenciado; solo conservar si se integra conscientemente. |
| `assets/ui/premium/qr_frame_overlay.png` | no referenciado; el QR debe mantener zona blanca limpia. |
| `assets/ui/premium/sparks_overlay.png` | no referenciado; mejor usar efectos controlados o asset optimizado. |
## Plan de generación recomendado
1. Generar un kit pequeño `assets/ui/generated/actions/` con 8-10 iconos ilustrados transparentes.
2. Redimensionar/comprimir cada icono a 128/160/192 px según uso.
3. Añadir soporte en `BotonFarolero` y `TarjetaFaseFarolero` para `assetIconPath`, manteniendo `IconData` solo como fallback.
4. Migrar primero acciones visibles: notas, votar, ver palabra, impostor, resultado, fuego.
5. Reutilizar los mismos assets en host/cliente/local para no multiplicar peso.
6. Eliminar `assets/ui/premium/` del runtime si sigue sin referencias reales.
+4 -1
View File
@@ -1,4 +1,4 @@
import 'package:flutter/material.dart'; import 'package:flutter/material.dart';
import 'package:farolero/l10n/generated/app_localizations.dart'; import 'package:farolero/l10n/generated/app_localizations.dart';
import 'package:provider/provider.dart'; import 'package:provider/provider.dart';
import '../estado/estado_juego.dart'; import '../estado/estado_juego.dart';
@@ -71,6 +71,7 @@ class _PantallaAdivinanzaState extends State<PantallaAdivinanza> {
const SizedBox(height: 12), const SizedBox(height: 12),
TarjetaFaseFarolero( TarjetaFaseFarolero(
icono: Icons.theater_comedy, icono: Icons.theater_comedy,
assetIconPath: 'assets/ui/generated/actions/action_impostor_mask.webp',
titulo: l10n.impostorCanGuess, titulo: l10n.impostorCanGuess,
subtitulo: l10n.ifCorrectImpostorsWin, subtitulo: l10n.ifCorrectImpostorsWin,
color: TemaApp.colorAcento, color: TemaApp.colorAcento,
@@ -122,6 +123,7 @@ class _PantallaAdivinanzaState extends State<PantallaAdivinanza> {
child: BotonFarolero( child: BotonFarolero(
texto: l10n.guess, texto: l10n.guess,
icono: Icons.send, icono: Icons.send,
assetIconPath: 'assets/ui/generated/actions/action_impostor_mask.webp',
onPressed: _controlador.text.trim().isNotEmpty ? _intentarAdivinar : null, onPressed: _controlador.text.trim().isNotEmpty ? _intentarAdivinar : null,
), ),
), ),
@@ -173,6 +175,7 @@ class _PantallaAdivinanzaState extends State<PantallaAdivinanza> {
BotonFarolero( BotonFarolero(
texto: acierto ? l10n.seeEndResult : l10n.nextRound, texto: acierto ? l10n.seeEndResult : l10n.nextRound,
icono: acierto ? Icons.emoji_events : Icons.skip_next, icono: acierto ? Icons.emoji_events : Icons.skip_next,
assetIconPath: acierto ? 'assets/ui/generated/actions/action_result_trophy.webp' : null,
onPressed: acierto onPressed: acierto
? () { ? () {
Navigator.pushReplacement( Navigator.pushReplacement(
+6 -1
View File
@@ -69,7 +69,12 @@ class _PantallaAjustesState extends State<PantallaAjustes> {
), ),
), ),
const SizedBox(width: 12), const SizedBox(width: 12),
const Icon(Icons.edit), Image.asset(
'assets/ui/generated/actions/action_settings_gear.webp',
width: 38,
height: 38,
fit: BoxFit.contain,
),
], ],
), ),
), ),
+24 -7
View File
@@ -151,7 +151,7 @@ class _PantallaCrearPartidaState extends State<PantallaCrearPartida> {
Future<void> _iniciarPartidaMulti() async { Future<void> _iniciarPartidaMulti() async {
final l10n = AppLocalizations.of(context)!; final l10n = AppLocalizations.of(context)!;
// 1. Pedir permisos automáticamente // 1. Pedir permisos automáticamente
final permisosOk = await ServicioPermisos.solicitarPermisosNearby(context); final permisosOk = await ServicioPermisos.solicitarPermisosNearby(context);
if (!permisosOk) { if (!permisosOk) {
if (mounted) { if (mounted) {
@@ -400,7 +400,7 @@ class _PantallaCrearPartidaState extends State<PantallaCrearPartida> {
), ),
const SizedBox(height: 12), const SizedBox(height: 12),
], ],
// Categoría // Categoría
Card( Card(
child: Padding( child: Padding(
padding: const EdgeInsets.fromLTRB(18, 18, 18, 28), padding: const EdgeInsets.fromLTRB(18, 18, 18, 28),
@@ -417,7 +417,15 @@ class _PantallaCrearPartidaState extends State<PantallaCrearPartida> {
child: DropdownButtonFormField<String>( child: DropdownButtonFormField<String>(
initialValue: _categoria, initialValue: _categoria,
decoration: const InputDecoration( decoration: const InputDecoration(
prefixIcon: Icon(Icons.category), prefixIcon: Padding(
padding: EdgeInsets.all(10),
child: Image.asset(
'assets/ui/generated/actions/action_category_cards.webp',
width: 24,
height: 24,
fit: BoxFit.contain,
),
),
), ),
items: categorias.map((c) { items: categorias.map((c) {
return DropdownMenuItem( return DropdownMenuItem(
@@ -465,7 +473,15 @@ class _PantallaCrearPartidaState extends State<PantallaCrearPartida> {
controller: _controladorNombre, controller: _controladorNombre,
decoration: InputDecoration( decoration: InputDecoration(
hintText: l10n.playerNameHint, hintText: l10n.playerNameHint,
prefixIcon: const Icon(Icons.person_add), prefixIcon: Padding(
padding: EdgeInsets.all(10),
child: Image.asset(
'assets/ui/generated/actions/action_add_player.webp',
width: 24,
height: 24,
fit: BoxFit.contain,
),
),
), ),
textCapitalization: TextCapitalization.words, textCapitalization: TextCapitalization.words,
onSubmitted: (_) => _agregarJugador(), onSubmitted: (_) => _agregarJugador(),
@@ -530,7 +546,7 @@ class _PantallaCrearPartidaState extends State<PantallaCrearPartida> {
const SizedBox(height: 12), const SizedBox(height: 12),
], ],
// Configuración de partida // Configuración de partida
Card( Card(
child: Padding( child: Padding(
padding: const EdgeInsets.fromLTRB(18, 18, 18, 28), padding: const EdgeInsets.fromLTRB(18, 18, 18, 28),
@@ -543,7 +559,7 @@ class _PantallaCrearPartidaState extends State<PantallaCrearPartida> {
), ),
const SizedBox(height: 12), const SizedBox(height: 12),
// Número de impostores // Número de impostores
Row( Row(
mainAxisAlignment: MainAxisAlignment.spaceBetween, mainAxisAlignment: MainAxisAlignment.spaceBetween,
children: [ children: [
@@ -604,10 +620,11 @@ class _PantallaCrearPartidaState extends State<PantallaCrearPartida> {
), ),
const SizedBox(height: 24), const SizedBox(height: 24),
// Botón iniciar // Botón iniciar
BotonFarolero( BotonFarolero(
texto: l10n.startGame, texto: l10n.startGame,
icono: Icons.play_arrow, icono: Icons.play_arrow,
assetIconPath: 'assets/ui/generated/actions/action_create_game.webp',
onPressed: (_modoMultimovil || _jugadores.length >= 3) onPressed: (_modoMultimovil || _jugadores.length >= 3)
? _iniciarPartida ? _iniciarPartida
: null, : null,
+4
View File
@@ -92,6 +92,7 @@ class _PantallaDebateState extends State<PantallaDebate> {
Expanded( Expanded(
child: TarjetaFaseFarolero( child: TarjetaFaseFarolero(
icono: Icons.forum, icono: Icons.forum,
assetIconPath: 'assets/ui/generated/actions/action_rules_book.webp',
titulo: l10n.playersInDebate, titulo: l10n.playersInDebate,
subtitulo: l10n.activePlayersInfo( subtitulo: l10n.activePlayersInfo(
partida.jugadoresActivos.length, partida.jugadoresActivos.length,
@@ -107,6 +108,7 @@ class _PantallaDebateState extends State<PantallaDebate> {
nombre: '${index + 1}. ${jugador.nombre}', nombre: '${index + 1}. ${jugador.nombre}',
subtitulo: jugador.eliminado ? l10n.eliminated : null, subtitulo: jugador.eliminado ? l10n.eliminated : null,
icono: jugador.eliminado ? Icons.person_off : Icons.record_voice_over, icono: jugador.eliminado ? Icons.person_off : Icons.record_voice_over,
assetIconPath: jugador.eliminado ? null : 'assets/ui/generated/actions/action_players_group.webp',
destacado: !jugador.eliminado, destacado: !jugador.eliminado,
completado: !jugador.eliminado, completado: !jugador.eliminado,
); );
@@ -122,6 +124,7 @@ class _PantallaDebateState extends State<PantallaDebate> {
child: BotonFarolero.oscuro( child: BotonFarolero.oscuro(
texto: l10n.notes, texto: l10n.notes,
icono: Icons.edit_note, icono: Icons.edit_note,
assetIconPath: 'assets/ui/generated/actions/action_notes_quill.webp',
onPressed: () { onPressed: () {
Navigator.push( Navigator.push(
context, context,
@@ -136,6 +139,7 @@ class _PantallaDebateState extends State<PantallaDebate> {
child: BotonFarolero( child: BotonFarolero(
texto: l10n.goToVoting, texto: l10n.goToVoting,
icono: Icons.how_to_vote, icono: Icons.how_to_vote,
assetIconPath: 'assets/ui/generated/actions/action_vote_mask.webp',
onPressed: _irAVotacion, onPressed: _irAVotacion,
), ),
), ),
+6 -1
View File
@@ -1,4 +1,4 @@
import 'dart:async'; import 'dart:async';
import 'package:flutter/material.dart'; import 'package:flutter/material.dart';
import 'package:farolero/l10n/generated/app_localizations.dart'; import 'package:farolero/l10n/generated/app_localizations.dart';
import 'package:farolero/modelos/inicio_partida_multijugador.dart'; import 'package:farolero/modelos/inicio_partida_multijugador.dart';
@@ -166,6 +166,7 @@ class _PantallaDebateClienteState extends State<PantallaDebateCliente> {
const SizedBox(height: 12), const SizedBox(height: 12),
TarjetaFaseFarolero( TarjetaFaseFarolero(
icono: Icons.forum, icono: Icons.forum,
assetIconPath: 'assets/ui/generated/actions/action_rules_book.webp',
titulo: l10n.debate, titulo: l10n.debate,
subtitulo: l10n.debateInstructions, subtitulo: l10n.debateInstructions,
child: Column( child: Column(
@@ -195,6 +196,7 @@ class _PantallaDebateClienteState extends State<PantallaDebateCliente> {
destacado: true, destacado: true,
completado: true, completado: true,
icono: Icons.record_voice_over, icono: Icons.record_voice_over,
assetIconPath: 'assets/ui/generated/actions/action_players_group.webp',
), ),
const SizedBox(height: 12), const SizedBox(height: 12),
], ],
@@ -205,6 +207,9 @@ class _PantallaDebateClienteState extends State<PantallaDebateCliente> {
icono: _votacionSolicitada icono: _votacionSolicitada
? Icons.hourglass_empty ? Icons.hourglass_empty
: Icons.how_to_vote, : Icons.how_to_vote,
assetIconPath: _votacionSolicitada
? null
: 'assets/ui/generated/actions/action_vote_mask.webp',
onPressed: _votacionSolicitada onPressed: _votacionSolicitada
? null ? null
: () { : () {
+15 -6
View File
@@ -412,10 +412,13 @@ class _TarjetaProgresoGamificacion extends StatelessWidget {
), ),
], ],
), ),
child: const Icon( child: Padding(
Icons.local_fire_department, padding: const EdgeInsets.all(7),
color: Color(0xFF1B1010), child: Image.asset(
size: 30, 'assets/ui/generated/actions/action_fire_badge.webp',
fit: BoxFit.contain,
filterQuality: FilterQuality.medium,
),
), ),
), ),
const SizedBox(width: 14), const SizedBox(width: 14),
@@ -582,8 +585,13 @@ class _DeltaFuego extends StatelessWidget {
child: Row( child: Row(
mainAxisSize: MainAxisSize.min, mainAxisSize: MainAxisSize.min,
children: [ children: [
const Icon(Icons.local_fire_department, Image.asset(
color: TemaApp.colorNaranja, size: 24), 'assets/ui/generated/actions/action_fire_badge.webp',
width: 26,
height: 26,
fit: BoxFit.contain,
filterQuality: FilterQuality.medium,
),
const SizedBox(width: 4), const SizedBox(width: 4),
Text( Text(
texto, texto,
@@ -950,6 +958,7 @@ class _BotonesFinPartida extends StatelessWidget {
BotonFarolero( BotonFarolero(
texto: l10n.rematch, texto: l10n.rematch,
icono: Icons.replay, icono: Icons.replay,
assetIconPath: 'assets/ui/generated/actions/action_create_game.webp',
onPressed: () { onPressed: () {
estado.revancha(); estado.revancha();
Navigator.pushReplacement( Navigator.pushReplacement(
@@ -164,6 +164,7 @@ class _PantallaFinPartidaOnlineState extends State<PantallaFinPartidaOnline> {
BotonFarolero.oscuro( BotonFarolero.oscuro(
texto: l10n.mainMenu, texto: l10n.mainMenu,
icono: Icons.home, icono: Icons.home,
assetIconPath: 'assets/ui/generated/actions/action_result_trophy.webp',
onPressed: () async { onPressed: () async {
await context.read<ServicioNearby>().desconectar(); await context.read<ServicioNearby>().desconectar();
if (!context.mounted) return; if (!context.mounted) return;
+13
View File
@@ -286,6 +286,7 @@ class _PantallaGestorHostState extends State<PantallaGestorHost> {
child: BotonFarolero.oscuro( child: BotonFarolero.oscuro(
texto: AppLocalizations.of(context)!.assumeOnThisPhone, texto: AppLocalizations.of(context)!.assumeOnThisPhone,
icono: Icons.person_add_alt_1, icono: Icons.person_add_alt_1,
assetIconPath: 'assets/ui/generated/actions/action_add_player.webp',
onPressed: () => nearby.asumirUsuariosDesconectados(), onPressed: () => nearby.asumirUsuariosDesconectados(),
), ),
), ),
@@ -411,6 +412,7 @@ class _PantallaGestorHostState extends State<PantallaGestorHost> {
) { ) {
return TarjetaFaseFarolero( return TarjetaFaseFarolero(
icono: Icons.visibility, icono: Icons.visibility,
assetIconPath: 'assets/ui/generated/actions/action_reveal_word.webp',
titulo: l10n.waitingPlayersSeeWord, titulo: l10n.waitingPlayersSeeWord,
subtitulo: l10n.connectedPlayers, subtitulo: l10n.connectedPlayers,
child: Column( child: Column(
@@ -427,6 +429,7 @@ class _PantallaGestorHostState extends State<PantallaGestorHost> {
BotonFarolero( BotonFarolero(
texto: l10n.seeYourWord, texto: l10n.seeYourWord,
icono: Icons.visibility, icono: Icons.visibility,
assetIconPath: 'assets/ui/generated/actions/action_reveal_word.webp',
onPressed: () => _mostrarPalabraHost(context), onPressed: () => _mostrarPalabraHost(context),
), ),
if (todosListos) ...[ if (todosListos) ...[
@@ -538,6 +541,7 @@ class _PantallaGestorHostState extends State<PantallaGestorHost> {
return TarjetaFaseFarolero( return TarjetaFaseFarolero(
icono: Icons.forum, icono: Icons.forum,
assetIconPath: 'assets/ui/generated/actions/action_rules_book.webp',
titulo: l10n.debate, titulo: l10n.debate,
subtitulo: l10n.debateInstructions, subtitulo: l10n.debateInstructions,
child: Column( child: Column(
@@ -605,6 +609,7 @@ class _PantallaGestorHostState extends State<PantallaGestorHost> {
return TarjetaFaseFarolero( return TarjetaFaseFarolero(
icono: Icons.how_to_vote, icono: Icons.how_to_vote,
assetIconPath: 'assets/ui/generated/actions/action_vote_mask.webp',
titulo: l10n.voting, titulo: l10n.voting,
subtitulo: l10n.votesProgress(votosEmitidos, totalVotos), subtitulo: l10n.votesProgress(votosEmitidos, totalVotos),
color: TemaApp.colorAcento, color: TemaApp.colorAcento,
@@ -668,6 +673,7 @@ class _PantallaGestorHostState extends State<PantallaGestorHost> {
: null; : null;
return TarjetaFaseFarolero( return TarjetaFaseFarolero(
icono: Icons.psychology, icono: Icons.psychology,
assetIconPath: 'assets/ui/generated/actions/action_impostor_mask.webp',
titulo: l10n.impostorGuessTitle, titulo: l10n.impostorGuessTitle,
subtitulo: ultimo == null subtitulo: ultimo == null
? l10n.impostorCanGuess ? l10n.impostorCanGuess
@@ -783,6 +789,7 @@ class _PantallaGestorHostState extends State<PantallaGestorHost> {
destacado: esHost, destacado: esHost,
completado: listo, completado: listo,
icono: esHost ? Icons.phone_android : Icons.devices, icono: esHost ? Icons.phone_android : Icons.devices,
assetIconPath: esHost ? 'assets/ui/generated/actions/action_mobile_device.webp' : 'assets/ui/generated/actions/action_multidevice_signal.webp',
); );
} }
@@ -798,18 +805,21 @@ class _PantallaGestorHostState extends State<PantallaGestorHost> {
return BotonFarolero( return BotonFarolero(
texto: todosListos ? l10n.allSeenStartDebate : l10n.waitingPlayersSeeWord, texto: todosListos ? l10n.allSeenStartDebate : l10n.waitingPlayersSeeWord,
icono: Icons.forum, icono: Icons.forum,
assetIconPath: 'assets/ui/generated/actions/action_rules_book.webp',
onPressed: todosListos ? () => _avanzarAFase(FaseJuego.debate) : null, onPressed: todosListos ? () => _avanzarAFase(FaseJuego.debate) : null,
); );
case FaseJuego.debate: case FaseJuego.debate:
return BotonFarolero.secundario( return BotonFarolero.secundario(
texto: l10n.goToVoting, texto: l10n.goToVoting,
icono: Icons.how_to_vote, icono: Icons.how_to_vote,
assetIconPath: 'assets/ui/generated/actions/action_vote_mask.webp',
onPressed: () => _avanzarAFase(FaseJuego.votacion), onPressed: () => _avanzarAFase(FaseJuego.votacion),
); );
case FaseJuego.votacion: case FaseJuego.votacion:
return BotonFarolero( return BotonFarolero(
texto: todosVotaron ? l10n.revealResult : l10n.waitingVoting, texto: todosVotaron ? l10n.revealResult : l10n.waitingVoting,
icono: Icons.visibility, icono: Icons.visibility,
assetIconPath: 'assets/ui/generated/actions/action_result_trophy.webp',
onPressed: todosVotaron ? () => _avanzarAFase(FaseJuego.resultado) : null, onPressed: todosVotaron ? () => _avanzarAFase(FaseJuego.resultado) : null,
); );
case FaseJuego.resultado: case FaseJuego.resultado:
@@ -843,6 +853,7 @@ class _PantallaGestorHostState extends State<PantallaGestorHost> {
return BotonFarolero( return BotonFarolero(
texto: l10n.seeEndResult, texto: l10n.seeEndResult,
icono: Icons.emoji_events, icono: Icons.emoji_events,
assetIconPath: 'assets/ui/generated/actions/action_result_trophy.webp',
onPressed: () => _finalizarPartidaOnline(context), onPressed: () => _finalizarPartidaOnline(context),
); );
} }
@@ -853,6 +864,7 @@ class _PantallaGestorHostState extends State<PantallaGestorHost> {
BotonFarolero.oscuro( BotonFarolero.oscuro(
texto: l10n.impostorGuessWord, texto: l10n.impostorGuessWord,
icono: Icons.psychology, icono: Icons.psychology,
assetIconPath: 'assets/ui/generated/actions/action_impostor_mask.webp',
onPressed: () => _iniciarAdivinanzaOnline(context), onPressed: () => _iniciarAdivinanzaOnline(context),
), ),
const SizedBox(height: 12), const SizedBox(height: 12),
@@ -878,6 +890,7 @@ class _PantallaGestorHostState extends State<PantallaGestorHost> {
BotonFarolero( BotonFarolero(
texto: l10n.guess, texto: l10n.guess,
icono: Icons.check_circle, icono: Icons.check_circle,
assetIconPath: 'assets/ui/generated/actions/action_impostor_mask.webp',
onPressed: () => _resolverAdivinanzaOnline(context), onPressed: () => _resolverAdivinanzaOnline(context),
), ),
const SizedBox(height: 12), const SizedBox(height: 12),
+1
View File
@@ -30,6 +30,7 @@ class PantallaHistorial extends StatelessWidget {
const SizedBox(height: 12), const SizedBox(height: 12),
EstadoVacioFarolero( EstadoVacioFarolero(
icono: Icons.history_rounded, icono: Icons.history_rounded,
assetIconPath: 'assets/ui/generated/actions/action_history_ledger.webp',
titulo: l10n.history, titulo: l10n.history,
subtitulo: l10n.noSavedGames, subtitulo: l10n.noSavedGames,
), ),
+3 -1
View File
@@ -8,7 +8,7 @@ import '../servicios/servicio_perfil_usuario.dart';
import '../tema/componentes_farolero.dart'; import '../tema/componentes_farolero.dart';
import '../tema/tema_app.dart'; import '../tema/tema_app.dart';
/// Lobby del host. El host es autoridad de sala y también cliente local. /// Lobby del host. El host es autoridad de sala y también cliente local.
class PantallaLobbyHost extends StatefulWidget { class PantallaLobbyHost extends StatefulWidget {
final String nombreSala; final String nombreSala;
final VoidCallback onIniciar; final VoidCallback onIniciar;
@@ -63,6 +63,7 @@ class _PantallaLobbyHostState extends State<PantallaLobbyHost> {
const SizedBox(height: 12), const SizedBox(height: 12),
EncabezadoFarolero( EncabezadoFarolero(
icono: Icons.wifi_tethering, icono: Icons.wifi_tethering,
assetIconPath: 'assets/ui/generated/actions/action_multidevice_signal.webp',
titulo: widget.nombreSala, titulo: widget.nombreSala,
subtitulo: l10n.scanToJoin, subtitulo: l10n.scanToJoin,
), ),
@@ -186,6 +187,7 @@ class _PantallaLobbyHostState extends State<PantallaLobbyHost> {
BotonFarolero( BotonFarolero(
texto: _iniciando ? l10n.starting : l10n.startGame, texto: _iniciando ? l10n.starting : l10n.startGame,
icono: Icons.play_arrow, icono: Icons.play_arrow,
assetIconPath: 'assets/ui/generated/actions/action_create_game.webp',
onPressed: puedeIniciar && !_iniciando onPressed: puedeIniciar && !_iniciando
? () { ? () {
setState(() => _iniciando = true); setState(() => _iniciando = true);
+2 -2
View File
@@ -5,7 +5,7 @@ import 'package:farolero/tema/componentes_farolero.dart';
import 'package:farolero/tema/tema_app.dart'; import 'package:farolero/tema/tema_app.dart';
/// Pantalla que ve cada jugador cuando recibe su palabra (modo multidispositivo). /// Pantalla que ve cada jugador cuando recibe su palabra (modo multidispositivo).
/// El cliente recibe la palabra vía ServicioNearby y se navega aquí. /// El cliente recibe la palabra vía ServicioNearby y se navega aquí.
/// NO es la pantalla del host. /// NO es la pantalla del host.
class PantallaPalabraCliente extends StatefulWidget { class PantallaPalabraCliente extends StatefulWidget {
final String palabra; final String palabra;
@@ -166,7 +166,7 @@ class _PantallaPalabraClienteState extends State<PantallaPalabraCliente> {
), ),
const Spacer(), const Spacer(),
// Botón confirmar // Botón confirmar
BotonFarolero( BotonFarolero(
texto: _haRevelado ? l10n.iveSeenIt : l10n.tapToSee, texto: _haRevelado ? l10n.iveSeenIt : l10n.tapToSee,
icono: Icons.check, icono: Icons.check,
@@ -135,6 +135,7 @@ class _PantallaPalabrasClienteState extends State<PantallaPalabrasCliente> {
? (_esUltimo ? l10n.iveSeenIt : l10n.next) ? (_esUltimo ? l10n.iveSeenIt : l10n.next)
: l10n.tapToSee, : l10n.tapToSee,
icono: _esUltimo ? Icons.check : Icons.arrow_forward, icono: _esUltimo ? Icons.check : Icons.arrow_forward,
assetIconPath: 'assets/ui/generated/actions/action_reveal_word.webp',
onPressed: _actualRevelado ? _continuar : null, onPressed: _actualRevelado ? _continuar : null,
), ),
], ],
+2 -2
View File
@@ -39,7 +39,7 @@ class _PantallaResultadoState extends State<PantallaResultado>
), ),
); );
// Iniciar animación de suspense // Iniciar animación de suspense
Future.delayed(const Duration(milliseconds: 500), () { Future.delayed(const Duration(milliseconds: 500), () {
_animController.forward().then((_) { _animController.forward().then((_) {
setState(() => _revelado = true); setState(() => _revelado = true);
@@ -72,7 +72,7 @@ class _PantallaResultadoState extends State<PantallaResultado>
child: Column( child: Column(
mainAxisAlignment: MainAxisAlignment.center, mainAxisAlignment: MainAxisAlignment.center,
children: [ children: [
// Animación de suspense // Animación de suspense
if (!_revelado) ...[ if (!_revelado) ...[
const ArteGameplayFarolero.resultado(height: 152), const ArteGameplayFarolero.resultado(height: 152),
const SizedBox(height: 16), const SizedBox(height: 16),
+18 -13
View File
@@ -19,7 +19,7 @@ import 'pantalla_resultado_online.dart';
import 'pantalla_fin_partida_online.dart'; import 'pantalla_fin_partida_online.dart';
/// Pantalla para unirse a una partida multidispositivo. /// Pantalla para unirse a una partida multidispositivo.
/// Flujo: nombre discovery automático (lista de salas) fallback QR /// Flujo: nombre ÃÆÃâÃâ Ã¢â¬â¢ÃƒÆÃ¢â¬Å¡ÃƒâšÃ¢ÃÆÃâÃâšÃ¢ÃÆÃ¢Ã¢ââšÂ¬Ã¡ÃâšÃ¬ÃÆÃ¢â¬Å¡ÃƒâšÃ ÃÆÃâÃâšÃ¢ÃÆÃ¢Ã¢ââšÂ¬Ã¡ÃâšÃ¬ÃÆÃ¢Ã¢ââšÂ¬Ã¾ÃâšÃ¢ discovery automÃÆÃâÃâ Ã¢â¬â¢ÃƒÆÃ¢â¬Â ÃƒÂ¢Ã¢âšÂ¬Ã¢âžÂ¢ÃƒÆÃââââšÂ¬Ã¡ÃÆÃ¢â¬Å¡ÃƒâšÃ¡tico (lista de salas) ÃÆÃâÃâ Ã¢â¬â¢ÃƒÆÃ¢â¬Å¡ÃƒâšÃ¢ÃÆÃâÃâšÃ¢ÃÆÃ¢Ã¢ââšÂ¬Ã¡ÃâšÃ¬ÃÆÃ¢â¬Å¡ÃƒâšÃ ÃÆÃâÃâšÃ¢ÃÆÃ¢Ã¢ââšÂ¬Ã¡ÃâšÃ¬ÃÆÃ¢Ã¢ââšÂ¬Ã¾ÃâšÃ¢ fallback QR
class PantallaUnirse extends StatefulWidget { class PantallaUnirse extends StatefulWidget {
const PantallaUnirse({super.key}); const PantallaUnirse({super.key});
@@ -64,7 +64,7 @@ class _PantallaUnirseState extends State<PantallaUnirse> {
nearby.onMensaje((endpointId, mensaje) { nearby.onMensaje((endpointId, mensaje) {
if (!mounted) return; if (!mounted) return;
if (mensaje.tipo == TipoMensaje.partidaInicio) { if (mensaje.tipo == TipoMensaje.partidaInicio) {
// El host ha iniciado la partida nos ha enviado nuestra palabra // El host ha iniciado la partida ÃÆÃâÃâ Ã¢â¬â¢ÃƒÆÃ¢â¬Å¡ÃƒâšÃ¢ÃÆÃâÃâšÃ¢ÃÆÃ¢Ã¢ââ¬Å¡Ã¬Ãâ¦Ã¡ÃÆÃ¢â¬Å¡ÃƒâšÃ¬ÃÆÃâÃâšÃ¢ÃÆÃ¢Ã¢ââšÂ¬Ã¡ÃâšÃ¬ÃÆÃ¢â¬Å¡ÃƒâšÃ nos ha enviado nuestra palabra
final jugadoresData = mensaje.datos['jugadores'] as List<dynamic>?; final jugadoresData = mensaje.datos['jugadores'] as List<dynamic>?;
final jugadoresTodosData = final jugadoresTodosData =
mensaje.datos['jugadoresTodos'] as List<dynamic>?; mensaje.datos['jugadoresTodos'] as List<dynamic>?;
@@ -303,7 +303,7 @@ class _PantallaUnirseState extends State<PantallaUnirse> {
if (!_formKey.currentState!.validate()) return; if (!_formKey.currentState!.validate()) return;
final l10n = AppLocalizations.of(context)!; final l10n = AppLocalizations.of(context)!;
// Solicitar permisos automáticamente // Solicitar permisos automÃÆÃâÃâ Ã¢â¬â¢ÃƒÆÃ¢â¬Â ÃƒÂ¢Ã¢âšÂ¬Ã¢âžÂ¢ÃƒÆÃââââšÂ¬Ã¡ÃÆÃ¢â¬Å¡ÃƒâšÃ¡ticamente
final permisosOk = await ServicioPermisos.solicitarPermisosNearby(context); final permisosOk = await ServicioPermisos.solicitarPermisosNearby(context);
if (!permisosOk) { if (!permisosOk) {
setState(() { setState(() {
@@ -365,7 +365,7 @@ class _PantallaUnirseState extends State<PantallaUnirse> {
_conectando = false; _conectando = false;
_error = l10n.couldNotConnectToHost(nombreHost); _error = l10n.couldNotConnectToHost(nombreHost);
}); });
// Reiniciar búsqueda // Reiniciar bÃÆÃâÃâ Ã¢â¬â¢ÃƒÆÃ¢â¬Â ÃƒÂ¢Ã¢âšÂ¬Ã¢âžÂ¢ÃƒÆÃââââšÂ¬Ã¡ÃÆÃ¢â¬Å¡ÃƒâšÃºsqueda
_iniciarBusqueda(); _iniciarBusqueda();
} }
} }
@@ -395,7 +395,7 @@ class _PantallaUnirseState extends State<PantallaUnirse> {
datos['host'] as String? ?? datos['sala'] as String? ?? l10n.room; datos['host'] as String? ?? datos['sala'] as String? ?? l10n.room;
}); });
// Iniciar búsqueda para que Nearby encuentre al host // Iniciar bÃÆÃâÃâ Ã¢â¬â¢ÃƒÆÃ¢â¬Â ÃƒÂ¢Ã¢âšÂ¬Ã¢âžÂ¢ÃƒÆÃââââšÂ¬Ã¡ÃÆÃ¢â¬Å¡ÃƒâšÃºsqueda para que Nearby encuentre al host
final nearby = context.read<ServicioNearby>(); final nearby = context.read<ServicioNearby>();
if (!nearby.buscando) { if (!nearby.buscando) {
final servicioPerfil = context.read<ServicioPerfilUsuario>(); final servicioPerfil = context.read<ServicioPerfilUsuario>();
@@ -419,7 +419,7 @@ class _PantallaUnirseState extends State<PantallaUnirse> {
final l10n = AppLocalizations.of(context)!; final l10n = AppLocalizations.of(context)!;
final nearby = context.watch<ServicioNearby>(); final nearby = context.watch<ServicioNearby>();
// Si estamos conectados pantalla de espera // Si estamos conectados ÃÆÃâÃâ Ã¢â¬â¢ÃƒÆÃ¢â¬Å¡ÃƒâšÃ¢ÃÆÃâÃâšÃ¢ÃÆÃ¢Ã¢ââšÂ¬Ã¡ÃâšÃ¬ÃÆÃ¢â¬Å¡ÃƒâšÃ ÃÆÃâÃâšÃ¢ÃÆÃ¢Ã¢ââšÂ¬Ã¡ÃâšÃ¬ÃÆÃ¢Ã¢ââšÂ¬Ã¾ÃâšÃ¢ pantalla de espera
if (nearby.conectado && !nearby.esHost) { if (nearby.conectado && !nearby.esHost) {
return _buildPantallaEspera(context, l10n); return _buildPantallaEspera(context, l10n);
} }
@@ -457,6 +457,7 @@ class _PantallaUnirseState extends State<PantallaUnirse> {
const SizedBox(height: 14), const SizedBox(height: 14),
EncabezadoFarolero( EncabezadoFarolero(
icono: Icons.bluetooth_searching, icono: Icons.bluetooth_searching,
assetIconPath: 'assets/ui/generated/actions/action_multidevice_signal.webp',
titulo: l10n.joinGameTitle, titulo: l10n.joinGameTitle,
subtitulo: l10n.enterNameToSearch, subtitulo: l10n.enterNameToSearch,
color: TemaApp.colorAzul, color: TemaApp.colorAzul,
@@ -479,6 +480,7 @@ class _PantallaUnirseState extends State<PantallaUnirse> {
BotonFarolero( BotonFarolero(
texto: l10n.searchGames, texto: l10n.searchGames,
icono: Icons.search, icono: Icons.search,
assetIconPath: 'assets/ui/generated/actions/action_join_search.webp',
onPressed: _iniciarBusqueda, onPressed: _iniciarBusqueda,
), ),
if (_error != null) ...[ if (_error != null) ...[
@@ -527,6 +529,7 @@ class _PantallaUnirseState extends State<PantallaUnirse> {
const SizedBox(height: 12), const SizedBox(height: 12),
EncabezadoFarolero( EncabezadoFarolero(
icono: _conectando ? Icons.sync : Icons.radar, icono: _conectando ? Icons.sync : Icons.radar,
assetIconPath: _conectando ? null : 'assets/ui/generated/actions/action_join_search.webp',
titulo: _conectando titulo: _conectando
? '${l10n.connectingTo} ${_salaSeleccionada ?? ""}...' ? '${l10n.connectingTo} ${_salaSeleccionada ?? ""}...'
: l10n.searchingGames, : l10n.searchingGames,
@@ -553,6 +556,7 @@ class _PantallaUnirseState extends State<PantallaUnirse> {
? Center( ? Center(
child: EstadoVacioFarolero( child: EstadoVacioFarolero(
icono: Icons.radar, icono: Icons.radar,
assetIconPath: 'assets/ui/generated/actions/action_join_search.webp',
titulo: l10n.noGamesFound, titulo: l10n.noGamesFound,
subtitulo: l10n.noGamesFoundHint, subtitulo: l10n.noGamesFoundHint,
), ),
@@ -584,10 +588,11 @@ class _PantallaUnirseState extends State<PantallaUnirse> {
const SizedBox(height: 8), const SizedBox(height: 8),
SizedBox( SizedBox(
width: double.infinity, width: double.infinity,
child: OutlinedButton.icon( child: BotonFarolero.oscuro(
texto: l10n.scanQR,
icono: Icons.qr_code_scanner,
assetIconPath: 'assets/ui/generated/actions/action_qr_scan.webp',
onPressed: _abrirEscaner, onPressed: _abrirEscaner,
icon: const Icon(Icons.qr_code_scanner),
label: Text(l10n.scanQR),
), ),
), ),
], ],
@@ -655,7 +660,7 @@ class _PantallaUnirseState extends State<PantallaUnirse> {
); );
} }
// ==================== ESCÁNER QR ==================== // ==================== ESCÃÆÃâÃâ Ã¢â¬â¢ÃƒÆÃ¢â¬Â ÃƒÂ¢Ã¢âšÂ¬Ã¢âžÂ¢ÃƒÆÃââââšÂ¬Ã¡ÃÆÃ¢â¬Å¡ÃƒâšÃNER QR ====================
Widget _buildEscaner(BuildContext context, AppLocalizations l10n) { Widget _buildEscaner(BuildContext context, AppLocalizations l10n) {
return Scaffold( return Scaffold(
@@ -766,7 +771,7 @@ class _PantallaUnirseState extends State<PantallaUnirse> {
padding: const EdgeInsets.all(12), padding: const EdgeInsets.all(12),
child: Column( child: Column(
children: [ children: [
// Opción crear nuevo usuario (tarea 3.5) // OpciÃÆÃâÃâ Ã¢â¬â¢ÃƒÆÃ¢â¬Â ÃƒÂ¢Ã¢âšÂ¬Ã¢âžÂ¢ÃƒÆÃââââšÂ¬Ã¡ÃÆÃ¢â¬Å¡ÃƒâšÃ³n crear nuevo usuario (tarea 3.5)
ListTile( ListTile(
leading: const Icon( leading: const Icon(
Icons.add, Icons.add,
@@ -798,7 +803,7 @@ class _PantallaUnirseState extends State<PantallaUnirse> {
); );
} }
/// Crea un nuevo usuario y lo envía al host /// Crea un nuevo usuario y lo envÃÆÃâÃâ Ã¢â¬â¢ÃƒÆÃ¢â¬Â ÃƒÂ¢Ã¢âšÂ¬Ã¢âžÂ¢ÃƒÆÃââââšÂ¬Ã¡ÃÆÃ¢â¬Å¡ÃƒâšÃ­a al host
Future<void> _crearNuevoUsuario(BuildContext context) async { Future<void> _crearNuevoUsuario(BuildContext context) async {
final l10n = AppLocalizations.of(context)!; final l10n = AppLocalizations.of(context)!;
final controller = TextEditingController(); final controller = TextEditingController();
@@ -847,7 +852,7 @@ class _PantallaUnirseState extends State<PantallaUnirse> {
} }
} }
/// Envía el usuario seleccionado/creado al host /// EnvÃÆÃâÃâ Ã¢â¬â¢ÃƒÆÃ¢â¬Â ÃƒÂ¢Ã¢âšÂ¬Ã¢âžÂ¢ÃƒÆÃââââšÂ¬Ã¡ÃÆÃ¢â¬Å¡ÃƒâšÃ­a el usuario seleccionado/creado al host
void _enviarUsuarioAlHost(Usuario usuario) { void _enviarUsuarioAlHost(Usuario usuario) {
final l10n = AppLocalizations.of(context)!; final l10n = AppLocalizations.of(context)!;
final nearby = context.read<ServicioNearby>(); final nearby = context.read<ServicioNearby>();
+5
View File
@@ -42,6 +42,7 @@ class _PantallaVerPalabraState extends State<PantallaVerPalabra> {
const SizedBox(height: 10), const SizedBox(height: 10),
TarjetaFaseFarolero( TarjetaFaseFarolero(
icono: Icons.visibility, icono: Icons.visibility,
assetIconPath: 'assets/ui/generated/actions/action_reveal_word.webp',
titulo: l10n.roundNumber(partida.rondaActual), titulo: l10n.roundNumber(partida.rondaActual),
subtitulo: l10n.eachPlayerMustSee, subtitulo: l10n.eachPlayerMustSee,
), ),
@@ -57,6 +58,7 @@ class _PantallaVerPalabraState extends State<PantallaVerPalabra> {
nombre: '${index + 1}. ${jugador.nombre}', nombre: '${index + 1}. ${jugador.nombre}',
subtitulo: haVisto ? l10n.alreadySeen : l10n.tapToSee, subtitulo: haVisto ? l10n.alreadySeen : l10n.tapToSee,
icono: haVisto ? Icons.check_circle : Icons.visibility, icono: haVisto ? Icons.check_circle : Icons.visibility,
assetIconPath: haVisto ? null : 'assets/ui/generated/actions/action_reveal_word.webp',
destacado: haVisto, destacado: haVisto,
completado: haVisto, completado: haVisto,
onTap: haVisto ? null : () => _mostrarPalabra(context, jugador.id), onTap: haVisto ? null : () => _mostrarPalabra(context, jugador.id),
@@ -70,6 +72,7 @@ class _PantallaVerPalabraState extends State<PantallaVerPalabra> {
? l10n.allSeenStartDebate ? l10n.allSeenStartDebate
: l10n.playersRemaining(partida.jugadores.length - _hanVisto.length), : l10n.playersRemaining(partida.jugadores.length - _hanVisto.length),
icono: Icons.forum, icono: Icons.forum,
assetIconPath: 'assets/ui/generated/actions/action_rules_book.webp',
onPressed: todosHanVisto onPressed: todosHanVisto
? () { ? () {
estado.iniciarDebate(); estado.iniciarDebate();
@@ -154,6 +157,7 @@ class _PantallaRevelarPalabraState extends State<_PantallaRevelarPalabra> {
const SizedBox(height: 12), const SizedBox(height: 12),
TarjetaFaseFarolero( TarjetaFaseFarolero(
icono: widget.esImpostor ? Icons.theater_comedy : Icons.search, icono: widget.esImpostor ? Icons.theater_comedy : Icons.search,
assetIconPath: widget.esImpostor ? 'assets/ui/generated/actions/action_impostor_mask.webp' : 'assets/ui/generated/actions/action_reveal_word.webp',
titulo: widget.nombre, titulo: widget.nombre,
subtitulo: l10n.holdToSeeWord, subtitulo: l10n.holdToSeeWord,
color: colorEstado, color: colorEstado,
@@ -250,6 +254,7 @@ class _PantallaRevelarPalabraState extends State<_PantallaRevelarPalabra> {
BotonFarolero.secundario( BotonFarolero.secundario(
texto: l10n.seenMyWord, texto: l10n.seenMyWord,
icono: Icons.check, icono: Icons.check,
assetIconPath: 'assets/ui/generated/actions/action_reveal_word.webp',
onPressed: () { onPressed: () {
widget.onVisto(); widget.onVisto();
Navigator.pop(context); Navigator.pop(context);
+5
View File
@@ -61,6 +61,7 @@ class _PantallaVotacionState extends State<PantallaVotacion> {
const SizedBox(height: 10), const SizedBox(height: 10),
TarjetaFaseFarolero( TarjetaFaseFarolero(
icono: Icons.how_to_vote, icono: Icons.how_to_vote,
assetIconPath: 'assets/ui/generated/actions/action_vote_mask.webp',
titulo: l10n.voteOf(votanteActual.nombre), titulo: l10n.voteOf(votanteActual.nombre),
subtitulo: l10n.votesProgress(estado.votos.length, activos.length), subtitulo: l10n.votesProgress(estado.votos.length, activos.length),
color: TemaApp.colorAcento, color: TemaApp.colorAcento,
@@ -78,6 +79,7 @@ class _PantallaVotacionState extends State<PantallaVotacion> {
Expanded( Expanded(
child: TarjetaFaseFarolero( child: TarjetaFaseFarolero(
icono: Icons.person_search, icono: Icons.person_search,
assetIconPath: 'assets/ui/generated/actions/action_players_group.webp',
titulo: l10n.whoIsImpostor, titulo: l10n.whoIsImpostor,
subtitulo: l10n.selectOnePlayer, subtitulo: l10n.selectOnePlayer,
color: TemaApp.colorNaranja, color: TemaApp.colorNaranja,
@@ -102,6 +104,7 @@ class _PantallaVotacionState extends State<PantallaVotacion> {
BotonFarolero( BotonFarolero(
texto: l10n.confirmVote, texto: l10n.confirmVote,
icono: Icons.how_to_vote, icono: Icons.how_to_vote,
assetIconPath: 'assets/ui/generated/actions/action_vote_mask.webp',
onPressed: _seleccionado != null onPressed: _seleccionado != null
? () { ? () {
estado.registrarVoto(votanteActual.id, _seleccionado!); estado.registrarVoto(votanteActual.id, _seleccionado!);
@@ -138,6 +141,7 @@ class _PantallaVotacionState extends State<PantallaVotacion> {
const SizedBox(height: 24), const SizedBox(height: 24),
TarjetaFaseFarolero( TarjetaFaseFarolero(
icono: Icons.check_circle, icono: Icons.check_circle,
assetIconPath: 'assets/ui/generated/actions/action_result_trophy.webp',
titulo: l10n.allVoted, titulo: l10n.allVoted,
subtitulo: l10n.tapToReveal, subtitulo: l10n.tapToReveal,
color: TemaApp.colorVerde, color: TemaApp.colorVerde,
@@ -147,6 +151,7 @@ class _PantallaVotacionState extends State<PantallaVotacion> {
BotonFarolero( BotonFarolero(
texto: l10n.revealResult, texto: l10n.revealResult,
icono: Icons.visibility, icono: Icons.visibility,
assetIconPath: 'assets/ui/generated/actions/action_result_trophy.webp',
onPressed: () { onPressed: () {
final resultado = estado.procesarVotacion(); final resultado = estado.procesarVotacion();
if (resultado != null) { if (resultado != null) {
+2 -1
View File
@@ -12,7 +12,7 @@ import 'package:farolero/tema/componentes_farolero.dart';
import 'package:farolero/tema/tema_app.dart'; import 'package:farolero/tema/tema_app.dart';
import 'package:provider/provider.dart'; import 'package:provider/provider.dart';
/// Pantalla de votación para cliente multidispositivo. /// Pantalla de votación para cliente multidispositivo.
/// Un cliente puede manejar uno o varios jugadores, por eso se recoge un voto /// Un cliente puede manejar uno o varios jugadores, por eso se recoge un voto
/// por cada jugador controlado activo. /// por cada jugador controlado activo.
class PantallaVotacionCliente extends StatefulWidget { class PantallaVotacionCliente extends StatefulWidget {
@@ -186,6 +186,7 @@ class _PantallaVotacionClienteState extends State<PantallaVotacionCliente> {
BotonFarolero.secundario( BotonFarolero.secundario(
texto: l10n.votar, texto: l10n.votar,
icono: Icons.how_to_vote, icono: Icons.how_to_vote,
assetIconPath: 'assets/ui/generated/actions/action_vote_mask.webp',
onPressed: _votacionCompleta onPressed: _votacionCompleta
? () => widget.onVotos(Map.unmodifiable(_votosPorVotante)) ? () => widget.onVotos(Map.unmodifiable(_votosPorVotante))
: null, : null,
+62 -6
View File
@@ -77,6 +77,7 @@ class PanelFarolero extends StatelessWidget {
class EncabezadoFarolero extends StatelessWidget { class EncabezadoFarolero extends StatelessWidget {
final IconData icono; final IconData icono;
final String? assetIconPath;
final String titulo; final String titulo;
final String? subtitulo; final String? subtitulo;
final Color color; final Color color;
@@ -86,6 +87,7 @@ class EncabezadoFarolero extends StatelessWidget {
const EncabezadoFarolero({ const EncabezadoFarolero({
super.key, super.key,
required this.icono, required this.icono,
this.assetIconPath,
required this.titulo, required this.titulo,
this.subtitulo, this.subtitulo,
this.color = TemaApp.colorNaranja, this.color = TemaApp.colorNaranja,
@@ -118,7 +120,16 @@ class EncabezadoFarolero extends StatelessWidget {
), ),
], ],
), ),
child: Icon(icono, color: color, size: 30), child: assetIconPath == null
? Icon(icono, color: color, size: 30)
: Padding(
padding: const EdgeInsets.all(6),
child: Image.asset(
assetIconPath!,
fit: BoxFit.contain,
filterQuality: FilterQuality.medium,
),
),
), ),
const SizedBox(width: 14), const SizedBox(width: 14),
Expanded( Expanded(
@@ -159,12 +170,14 @@ class EncabezadoFarolero extends StatelessWidget {
class EstadoVacioFarolero extends StatelessWidget { class EstadoVacioFarolero extends StatelessWidget {
final IconData icono; final IconData icono;
final String? assetIconPath;
final String titulo; final String titulo;
final String subtitulo; final String subtitulo;
const EstadoVacioFarolero({ const EstadoVacioFarolero({
super.key, super.key,
required this.icono, required this.icono,
this.assetIconPath,
required this.titulo, required this.titulo,
required this.subtitulo, required this.subtitulo,
}); });
@@ -176,7 +189,17 @@ class EstadoVacioFarolero extends StatelessWidget {
child: Column( child: Column(
mainAxisSize: MainAxisSize.min, mainAxisSize: MainAxisSize.min,
children: [ children: [
Icon(icono, color: TemaApp.colorNaranja, size: 46), SizedBox(
width: 64,
height: 64,
child: assetIconPath == null
? Icon(icono, color: TemaApp.colorNaranja, size: 46)
: Image.asset(
assetIconPath!,
fit: BoxFit.contain,
filterQuality: FilterQuality.medium,
),
),
const SizedBox(height: 14), const SizedBox(height: 14),
Text( Text(
titulo, titulo,
@@ -233,6 +256,7 @@ class LogoFarolero extends StatelessWidget {
class BotonFarolero extends StatelessWidget { class BotonFarolero extends StatelessWidget {
final String texto; final String texto;
final IconData icono; final IconData icono;
final String? assetIconPath;
final VoidCallback? onPressed; final VoidCallback? onPressed;
final LinearGradient gradient; final LinearGradient gradient;
final Color foreground; final Color foreground;
@@ -242,6 +266,7 @@ class BotonFarolero extends StatelessWidget {
super.key, super.key,
required this.texto, required this.texto,
required this.icono, required this.icono,
this.assetIconPath,
required this.onPressed, required this.onPressed,
this.gradient = TemaApp.gradientePrimario, this.gradient = TemaApp.gradientePrimario,
this.foreground = Colors.black, this.foreground = Colors.black,
@@ -252,6 +277,7 @@ class BotonFarolero extends StatelessWidget {
super.key, super.key,
required this.texto, required this.texto,
required this.icono, required this.icono,
this.assetIconPath,
required this.onPressed, required this.onPressed,
}) : gradient = const LinearGradient( }) : gradient = const LinearGradient(
colors: [TemaApp.colorPurpura, Color(0xFF2B1736)], colors: [TemaApp.colorPurpura, Color(0xFF2B1736)],
@@ -265,6 +291,7 @@ class BotonFarolero extends StatelessWidget {
super.key, super.key,
required this.texto, required this.texto,
required this.icono, required this.icono,
this.assetIconPath,
required this.onPressed, required this.onPressed,
}) : gradient = const LinearGradient( }) : gradient = const LinearGradient(
colors: [Color(0xFF151F27), Color(0xFF090E13)], colors: [Color(0xFF151F27), Color(0xFF090E13)],
@@ -303,7 +330,14 @@ class BotonFarolero extends StatelessWidget {
children: [ children: [
SizedBox( SizedBox(
width: 44, width: 44,
child: Icon(icono, color: colorTexto, size: 30), height: 40,
child: assetIconPath == null
? Icon(icono, color: colorTexto, size: 30)
: Image.asset(
assetIconPath!,
fit: BoxFit.contain,
filterQuality: FilterQuality.medium,
),
), ),
const SizedBox(width: 10), const SizedBox(width: 10),
Expanded( Expanded(
@@ -337,6 +371,7 @@ class BotonFarolero extends StatelessWidget {
class TarjetaFaseFarolero extends StatelessWidget { class TarjetaFaseFarolero extends StatelessWidget {
final IconData icono; final IconData icono;
final String? assetIconPath;
final String titulo; final String titulo;
final String? subtitulo; final String? subtitulo;
final Color color; final Color color;
@@ -346,6 +381,7 @@ class TarjetaFaseFarolero extends StatelessWidget {
const TarjetaFaseFarolero({ const TarjetaFaseFarolero({
super.key, super.key,
required this.icono, required this.icono,
this.assetIconPath,
required this.titulo, required this.titulo,
this.subtitulo, this.subtitulo,
this.color = TemaApp.colorNaranja, this.color = TemaApp.colorNaranja,
@@ -377,7 +413,16 @@ class TarjetaFaseFarolero extends StatelessWidget {
), ),
border: Border.all(color: color.withValues(alpha: 0.72)), border: Border.all(color: color.withValues(alpha: 0.72)),
), ),
child: Icon(icono, color: color, size: 30), child: assetIconPath == null
? Icon(icono, color: color, size: 30)
: Padding(
padding: const EdgeInsets.all(6),
child: Image.asset(
assetIconPath!,
fit: BoxFit.contain,
filterQuality: FilterQuality.medium,
),
),
), ),
const SizedBox(width: 14), const SizedBox(width: 14),
Expanded( Expanded(
@@ -418,6 +463,7 @@ class EstadoJugadorFarolero extends StatelessWidget {
final bool destacado; final bool destacado;
final bool completado; final bool completado;
final IconData icono; final IconData icono;
final String? assetIconPath;
final String? subtitulo; final String? subtitulo;
final VoidCallback? onTap; final VoidCallback? onTap;
@@ -427,6 +473,7 @@ class EstadoJugadorFarolero extends StatelessWidget {
this.destacado = false, this.destacado = false,
this.completado = false, this.completado = false,
this.icono = Icons.person, this.icono = Icons.person,
this.assetIconPath,
this.subtitulo, this.subtitulo,
this.onTap, this.onTap,
}); });
@@ -464,7 +511,16 @@ class EstadoJugadorFarolero extends StatelessWidget {
color: color.withValues(alpha: 0.16), color: color.withValues(alpha: 0.16),
border: Border.all(color: color.withValues(alpha: 0.72)), border: Border.all(color: color.withValues(alpha: 0.72)),
), ),
child: Icon(icono, color: color, size: 24), child: assetIconPath == null
? Icon(icono, color: color, size: 24)
: Padding(
padding: const EdgeInsets.all(5),
child: Image.asset(
assetIconPath!,
fit: BoxFit.contain,
filterQuality: FilterQuality.medium,
),
),
), ),
const SizedBox(width: 12), const SizedBox(width: 12),
Expanded( Expanded(
@@ -553,7 +609,7 @@ class TemporizadorFarolero extends StatelessWidget {
alignment: Alignment.center, alignment: Alignment.center,
children: [ children: [
Image.asset( Image.asset(
'assets/ui/generated/gameplay/gameplay_phase_emblem.webp', 'assets/ui/generated/actions/action_timer_hourglass.webp',
height: 132, height: 132,
fit: BoxFit.contain, fit: BoxFit.contain,
opacity: const AlwaysStoppedAnimation(0.34), opacity: const AlwaysStoppedAnimation(0.34),
+20 -10
View File
@@ -590,8 +590,13 @@ class BarraFuegoPremiumFarolero extends StatelessWidget {
children: [ children: [
Row( Row(
children: [ children: [
const Icon(Icons.local_fire_department, Image.asset(
color: TemaApp.colorNaranja, size: 18), 'assets/ui/generated/actions/action_fire_badge.webp',
width: 22,
height: 22,
fit: BoxFit.contain,
filterQuality: FilterQuality.medium,
),
const SizedBox(width: 6), const SizedBox(width: 6),
Text( Text(
'${AppLocalizations.of(context)!.fireLabel} ' '${AppLocalizations.of(context)!.fireLabel} '
@@ -1147,10 +1152,13 @@ class _IconoFuegoRecompensa extends StatelessWidget {
), ),
], ],
), ),
child: const Icon( child: Padding(
Icons.local_fire_department, padding: const EdgeInsets.all(7),
color: Color(0xFF1B1010), child: Image.asset(
size: 30, 'assets/ui/generated/actions/action_fire_badge.webp',
fit: BoxFit.contain,
filterQuality: FilterQuality.medium,
),
), ),
); );
} }
@@ -1185,10 +1193,12 @@ class _DeltaFuegoPremium extends StatelessWidget {
child: Row( child: Row(
mainAxisSize: MainAxisSize.min, mainAxisSize: MainAxisSize.min,
children: [ children: [
const Icon( Image.asset(
Icons.local_fire_department, 'assets/ui/generated/actions/action_fire_badge.webp',
color: TemaApp.colorNaranja, width: 26,
size: 24, height: 26,
fit: BoxFit.contain,
filterQuality: FilterQuality.medium,
), ),
const SizedBox(width: 4), const SizedBox(width: 4),
Text( Text(
+1
View File
@@ -47,3 +47,4 @@ flutter:
- assets/ui/generated/final_rewards/ - assets/ui/generated/final_rewards/
- assets/ui/generated/gameplay/ - assets/ui/generated/gameplay/
- assets/ui/generated/meta/ - assets/ui/generated/meta/
- assets/ui/generated/actions/
Binary file not shown.

After

Width:  |  Height:  |  Size: 223 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 430 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 427 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 385 KiB

+133
View File
@@ -0,0 +1,133 @@
"Path","SizeKB","Refs"
"assets/app_icon/farolero_app_icon.png","1580,7","0"
"assets/avatars/avatar_02.png","103,9","1"
"assets/avatars/avatar_03.png","106,1","1"
"assets/avatars/avatar_04.png","94,6","1"
"assets/avatars/avatar_05.png","108,7","1"
"assets/avatars/avatar_06.png","106,7","1"
"assets/avatars/avatar_07.png","105,3","1"
"assets/avatars/avatar_08.png","106","1"
"assets/avatars/avatar_09.png","101,1","1"
"assets/avatars/avatar_10.png","113,7","1"
"assets/avatars/avatar_11.png","103,7","1"
"assets/avatars/avatar_12.png","109,1","1"
"assets/avatars/avatar_13.png","109,3","1"
"assets/avatars/avatar_14.png","109,9","1"
"assets/avatars/avatar_15.png","112,9","1"
"assets/avatars/avatar_16.png","109,3","1"
"assets/avatars/avatar_17.png","105,4","1"
"assets/avatars/avatar_18.png","105,5","1"
"assets/avatars/avatar_19.png","111,5","1"
"assets/avatars/avatar_20.png","106,8","1"
"assets/avatars/avatar_21.png","106,1","1"
"assets/avatars/avatar_22.png","110,5","1"
"assets/avatars/avatar_23.png","103,9","1"
"assets/avatars/avatar_24.png","108,6","1"
"assets/avatars/avatar_25.png","115,7","1"
"assets/avatars/avatar_26.png","108,4","1"
"assets/avatars/avatar_27.png","114,9","1"
"assets/avatars/avatar_28.png","111,8","1"
"assets/avatars/avatar_29.png","102,8","1"
"assets/avatars/avatar_30.png","103,1","1"
"assets/avatars/avatar_31.png","116,6","1"
"assets/avatars/avatar_32.png","114,2","1"
"assets/avatars/avatar_33.png","117,3","1"
"assets/avatars/avatar_34.png","117,8","1"
"assets/avatars/avatar_35.png","119,2","1"
"assets/avatars/avatar_36.png","121,4","1"
"assets/avatars/avatar_37.png","121","1"
"assets/avatars/avatar_38.png","123,4","1"
"assets/avatars/avatar_39.png","121,8","1"
"assets/avatars/avatar_40.png","122,1","1"
"assets/avatars/avatar_41.png","124,5","1"
"assets/avatars/avatar_42.png","119,9","1"
"assets/avatars/avatar_43.png","126,4","1"
"assets/avatars/avatar_44.png","124,3","1"
"assets/avatars/avatar_45.png","125,3","1"
"assets/avatars/avatar_46.png","121,7","1"
"assets/avatars/avatar_47.png","115,9","1"
"assets/avatars/avatar_48.png","115,3","1"
"assets/avatars/avatar_49.png","113,2","1"
"assets/avatars/avatar_50.png","106,8","1"
"assets/avatars/avatar_51.png","118,7","1"
"assets/avatars/avatar_52.png","116","1"
"assets/avatars/avatar_53.png","117,6","1"
"assets/avatars/avatar_54.png","109,6","1"
"assets/avatars/avatar_55.png","119,3","1"
"assets/avatars/avatar_56.png","118,2","1"
"assets/avatars/avatar_57.png","115,5","1"
"assets/avatars/avatar_58.png","108,3","1"
"assets/avatars/avatar_59.png","113,6","1"
"assets/avatars/avatar_60.png","112,4","1"
"assets/avatars/avatar_61.png","112,3","1"
"assets/avatars/avatar_62.png","106,8","1"
"assets/avatars/avatar_63.png","105,9","1"
"assets/avatars/avatar_64.png","108,6","1"
"assets/avatars/avatar_65.png","111,9","1"
"assets/avatars/avatar_66.png","103,6","1"
"assets/avatars/avatar_67.png","115,8","1"
"assets/avatars/avatar_68.png","115,3","1"
"assets/avatars/avatar_69.png","113,9","1"
"assets/avatars/avatar_70.png","105,8","1"
"assets/avatars/avatar_71.png","113,6","1"
"assets/avatars/avatar_72.png","112,5","1"
"assets/avatars/avatar_73.png","114,4","1"
"assets/avatars/avatar_74.png","107,5","1"
"assets/avatars/avatar_75.png","111,4","1"
"assets/avatars/avatar_76.png","111,7","1"
"assets/avatars/avatar_77.png","113,5","1"
"assets/avatars/avatar_78.png","105,9","1"
"assets/avatars/avatar_79.png","108","1"
"assets/avatars/avatar_80.png","104,6","1"
"assets/avatars/avatar_81.png","105,7","1"
"assets/avatars/avatar_82.png","113,1","1"
"assets/avatars/avatar_83.png","110,8","1"
"assets/avatars/avatar_84.png","104,7","1"
"assets/medals/brasa.webp","22,9","1"
"assets/medals/cincuenta_victorias.webp","25,3","1"
"assets/medals/diez_victorias.webp","20,5","1"
"assets/medals/habitual.webp","25,7","1"
"assets/medals/impostor_habitual.webp","25","1"
"assets/medals/incandescente.webp","27","1"
"assets/medals/leyenda.webp","27,7","1"
"assets/medals/llama_fuerte.webp","24,2","1"
"assets/medals/llama_suave.webp","22","1"
"assets/medals/lobo_faroles.webp","24,6","1"
"assets/medals/novato.webp","20,9","1"
"assets/medals/primer_engano.webp","23,2","1"
"assets/medals/primera_victoria.webp","18,1","1"
"assets/medals/veinticinco_victorias.webp","24","1"
"assets/medals/veterano.webp","26,9","1"
"assets/ui/generated/actions/action_category_cards.webp","10,1","1"
"assets/ui/generated/actions/action_history_ledger.webp","8,8","1"
"assets/ui/generated/actions/action_mobile_device.webp","7,5","1"
"assets/ui/generated/actions/action_notes_quill.webp","9,8","1"
"assets/ui/generated/actions/action_qr_scan.webp","8,5","1"
"assets/ui/generated/actions/action_settings_gear.webp","10,8","1"
"assets/ui/generated/actions/action_timer_hourglass.webp","8,3","1"
"assets/ui/generated/create_game/create_game_header_art.webp","122,5","1"
"assets/ui/generated/gameplay/notes_strategy_art.webp","126,4","1"
"assets/ui/generated/join_lobby/qr_frame.webp","113,2","1"
"assets/ui/generated/main/main_atmosphere_bg.webp","89,1","1"
"assets/ui/generated/meta/history_ledger_art.webp","130,9","1"
"assets/ui/generated/meta/settings_profile_art.webp","124,2","1"
"assets/ui/generated/mode/mode_duel_hero.webp","84,7","1"
"assets/ui/generated/shared/screen_atmosphere_bg.webp","143,1","1"
"assets/avatars/avatar_01.png","90,4","2"
"assets/rewards/medal_unlock_burst.webp","185,8","2"
"assets/ui/generated/actions/action_add_player.webp","8,2","2"
"assets/ui/generated/final_rewards/cinematic_burst.webp","178,6","2"
"assets/ui/generated/gameplay/gameplay_phase_emblem.webp","113,2","2"
"assets/ui/generated/join_lobby/signal_art.webp","129,3","2"
"assets/ui/generated/main/main_lantern_hero.webp","69,4","2"
"assets/ui/generated/actions/action_create_game.webp","8,6","3"
"assets/ui/generated/actions/action_join_search.webp","8,2","3"
"assets/ui/generated/actions/action_multidevice_signal.webp","9,8","3"
"assets/ui/generated/actions/action_players_group.webp","9","3"
"assets/ui/generated/meta/result_verdict_art.webp","129,1","3"
"assets/ui/generated/actions/action_fire_badge.webp","8,1","5"
"assets/ui/generated/actions/action_rules_book.webp","7,2","5"
"assets/ui/generated/actions/action_impostor_mask.webp","8,1","6"
"assets/ui/generated/actions/action_result_trophy.webp","12,2","6"
"assets/ui/generated/actions/action_reveal_word.webp","9,3","7"
"assets/ui/generated/actions/action_vote_mask.webp","8,6","7"
1 Path SizeKB Refs
2 assets/app_icon/farolero_app_icon.png 1580,7 0
3 assets/avatars/avatar_02.png 103,9 1
4 assets/avatars/avatar_03.png 106,1 1
5 assets/avatars/avatar_04.png 94,6 1
6 assets/avatars/avatar_05.png 108,7 1
7 assets/avatars/avatar_06.png 106,7 1
8 assets/avatars/avatar_07.png 105,3 1
9 assets/avatars/avatar_08.png 106 1
10 assets/avatars/avatar_09.png 101,1 1
11 assets/avatars/avatar_10.png 113,7 1
12 assets/avatars/avatar_11.png 103,7 1
13 assets/avatars/avatar_12.png 109,1 1
14 assets/avatars/avatar_13.png 109,3 1
15 assets/avatars/avatar_14.png 109,9 1
16 assets/avatars/avatar_15.png 112,9 1
17 assets/avatars/avatar_16.png 109,3 1
18 assets/avatars/avatar_17.png 105,4 1
19 assets/avatars/avatar_18.png 105,5 1
20 assets/avatars/avatar_19.png 111,5 1
21 assets/avatars/avatar_20.png 106,8 1
22 assets/avatars/avatar_21.png 106,1 1
23 assets/avatars/avatar_22.png 110,5 1
24 assets/avatars/avatar_23.png 103,9 1
25 assets/avatars/avatar_24.png 108,6 1
26 assets/avatars/avatar_25.png 115,7 1
27 assets/avatars/avatar_26.png 108,4 1
28 assets/avatars/avatar_27.png 114,9 1
29 assets/avatars/avatar_28.png 111,8 1
30 assets/avatars/avatar_29.png 102,8 1
31 assets/avatars/avatar_30.png 103,1 1
32 assets/avatars/avatar_31.png 116,6 1
33 assets/avatars/avatar_32.png 114,2 1
34 assets/avatars/avatar_33.png 117,3 1
35 assets/avatars/avatar_34.png 117,8 1
36 assets/avatars/avatar_35.png 119,2 1
37 assets/avatars/avatar_36.png 121,4 1
38 assets/avatars/avatar_37.png 121 1
39 assets/avatars/avatar_38.png 123,4 1
40 assets/avatars/avatar_39.png 121,8 1
41 assets/avatars/avatar_40.png 122,1 1
42 assets/avatars/avatar_41.png 124,5 1
43 assets/avatars/avatar_42.png 119,9 1
44 assets/avatars/avatar_43.png 126,4 1
45 assets/avatars/avatar_44.png 124,3 1
46 assets/avatars/avatar_45.png 125,3 1
47 assets/avatars/avatar_46.png 121,7 1
48 assets/avatars/avatar_47.png 115,9 1
49 assets/avatars/avatar_48.png 115,3 1
50 assets/avatars/avatar_49.png 113,2 1
51 assets/avatars/avatar_50.png 106,8 1
52 assets/avatars/avatar_51.png 118,7 1
53 assets/avatars/avatar_52.png 116 1
54 assets/avatars/avatar_53.png 117,6 1
55 assets/avatars/avatar_54.png 109,6 1
56 assets/avatars/avatar_55.png 119,3 1
57 assets/avatars/avatar_56.png 118,2 1
58 assets/avatars/avatar_57.png 115,5 1
59 assets/avatars/avatar_58.png 108,3 1
60 assets/avatars/avatar_59.png 113,6 1
61 assets/avatars/avatar_60.png 112,4 1
62 assets/avatars/avatar_61.png 112,3 1
63 assets/avatars/avatar_62.png 106,8 1
64 assets/avatars/avatar_63.png 105,9 1
65 assets/avatars/avatar_64.png 108,6 1
66 assets/avatars/avatar_65.png 111,9 1
67 assets/avatars/avatar_66.png 103,6 1
68 assets/avatars/avatar_67.png 115,8 1
69 assets/avatars/avatar_68.png 115,3 1
70 assets/avatars/avatar_69.png 113,9 1
71 assets/avatars/avatar_70.png 105,8 1
72 assets/avatars/avatar_71.png 113,6 1
73 assets/avatars/avatar_72.png 112,5 1
74 assets/avatars/avatar_73.png 114,4 1
75 assets/avatars/avatar_74.png 107,5 1
76 assets/avatars/avatar_75.png 111,4 1
77 assets/avatars/avatar_76.png 111,7 1
78 assets/avatars/avatar_77.png 113,5 1
79 assets/avatars/avatar_78.png 105,9 1
80 assets/avatars/avatar_79.png 108 1
81 assets/avatars/avatar_80.png 104,6 1
82 assets/avatars/avatar_81.png 105,7 1
83 assets/avatars/avatar_82.png 113,1 1
84 assets/avatars/avatar_83.png 110,8 1
85 assets/avatars/avatar_84.png 104,7 1
86 assets/medals/brasa.webp 22,9 1
87 assets/medals/cincuenta_victorias.webp 25,3 1
88 assets/medals/diez_victorias.webp 20,5 1
89 assets/medals/habitual.webp 25,7 1
90 assets/medals/impostor_habitual.webp 25 1
91 assets/medals/incandescente.webp 27 1
92 assets/medals/leyenda.webp 27,7 1
93 assets/medals/llama_fuerte.webp 24,2 1
94 assets/medals/llama_suave.webp 22 1
95 assets/medals/lobo_faroles.webp 24,6 1
96 assets/medals/novato.webp 20,9 1
97 assets/medals/primer_engano.webp 23,2 1
98 assets/medals/primera_victoria.webp 18,1 1
99 assets/medals/veinticinco_victorias.webp 24 1
100 assets/medals/veterano.webp 26,9 1
101 assets/ui/generated/actions/action_category_cards.webp 10,1 1
102 assets/ui/generated/actions/action_history_ledger.webp 8,8 1
103 assets/ui/generated/actions/action_mobile_device.webp 7,5 1
104 assets/ui/generated/actions/action_notes_quill.webp 9,8 1
105 assets/ui/generated/actions/action_qr_scan.webp 8,5 1
106 assets/ui/generated/actions/action_settings_gear.webp 10,8 1
107 assets/ui/generated/actions/action_timer_hourglass.webp 8,3 1
108 assets/ui/generated/create_game/create_game_header_art.webp 122,5 1
109 assets/ui/generated/gameplay/notes_strategy_art.webp 126,4 1
110 assets/ui/generated/join_lobby/qr_frame.webp 113,2 1
111 assets/ui/generated/main/main_atmosphere_bg.webp 89,1 1
112 assets/ui/generated/meta/history_ledger_art.webp 130,9 1
113 assets/ui/generated/meta/settings_profile_art.webp 124,2 1
114 assets/ui/generated/mode/mode_duel_hero.webp 84,7 1
115 assets/ui/generated/shared/screen_atmosphere_bg.webp 143,1 1
116 assets/avatars/avatar_01.png 90,4 2
117 assets/rewards/medal_unlock_burst.webp 185,8 2
118 assets/ui/generated/actions/action_add_player.webp 8,2 2
119 assets/ui/generated/final_rewards/cinematic_burst.webp 178,6 2
120 assets/ui/generated/gameplay/gameplay_phase_emblem.webp 113,2 2
121 assets/ui/generated/join_lobby/signal_art.webp 129,3 2
122 assets/ui/generated/main/main_lantern_hero.webp 69,4 2
123 assets/ui/generated/actions/action_create_game.webp 8,6 3
124 assets/ui/generated/actions/action_join_search.webp 8,2 3
125 assets/ui/generated/actions/action_multidevice_signal.webp 9,8 3
126 assets/ui/generated/actions/action_players_group.webp 9 3
127 assets/ui/generated/meta/result_verdict_art.webp 129,1 3
128 assets/ui/generated/actions/action_fire_badge.webp 8,1 5
129 assets/ui/generated/actions/action_rules_book.webp 7,2 5
130 assets/ui/generated/actions/action_impostor_mask.webp 8,1 6
131 assets/ui/generated/actions/action_result_trophy.webp 12,2 6
132 assets/ui/generated/actions/action_reveal_word.webp 9,3 7
133 assets/ui/generated/actions/action_vote_mask.webp 8,6 7
+187
View File
@@ -0,0 +1,187 @@
"Icon","File","Line","Text"
"Icons.theater_comedy","lib\pantallas\pantalla_adivinanza.dart","73","icono: Icons.theater_comedy,"
"Icons.search","lib\pantallas\pantalla_adivinanza.dart","102","prefixIcon: const Icon(Icons.search),"
"Icons.skip_next","lib\pantallas\pantalla_adivinanza.dart","116","icono: Icons.skip_next,"
"Icons.send","lib\pantallas\pantalla_adivinanza.dart","125","icono: Icons.send,"
"Icons.celebration","lib\pantallas\pantalla_adivinanza.dart","147","acierto ? Icons.celebration : Icons.cancel,"
"Icons.cancel","lib\pantallas\pantalla_adivinanza.dart","147","acierto ? Icons.celebration : Icons.cancel,"
"Icons.emoji_events","lib\pantallas\pantalla_adivinanza.dart","177","icono: acierto ? Icons.emoji_events : Icons.skip_next,"
"Icons.skip_next","lib\pantallas\pantalla_adivinanza.dart","177","icono: acierto ? Icons.emoji_events : Icons.skip_next,"
"Icons.check_circle","lib\pantallas\pantalla_ajustes.dart","138","? const Icon(Icons.check_circle, color: TemaApp.colorAcento)"
"Icons.person","lib\pantallas\pantalla_ajustes.dart","175","prefixIcon: const Icon(Icons.person),"
"Icons.alternate_email","lib\pantallas\pantalla_ajustes.dart","183","prefixIcon: const Icon(Icons.alternate_email),"
"Icons.phone_android","lib\pantallas\pantalla_crear_partida.dart","356","icon: const Icon(Icons.phone_android),"
"Icons.devices","lib\pantallas\pantalla_crear_partida.dart","361","icon: const Icon(Icons.devices),"
"Icons.devices","lib\pantallas\pantalla_crear_partida.dart","386","_modoMultimovil ? Icons.devices : Icons.phone_android,"
"Icons.phone_android","lib\pantallas\pantalla_crear_partida.dart","386","_modoMultimovil ? Icons.devices : Icons.phone_android,"
"Icons.add","lib\pantallas\pantalla_crear_partida.dart","493","icon: const Icon(Icons.add),"
"Icons.lock","lib\pantallas\pantalla_crear_partida.dart","532","? const Icon(Icons.lock, color: TemaApp.colorDorado)"
"Icons.close","lib\pantallas\pantalla_crear_partida.dart","535","Icons.close,"
"Icons.remove_circle_outline","lib\pantallas\pantalla_crear_partida.dart","573","icon: const Icon(Icons.remove_circle_outline),"
"Icons.add_circle_outline","lib\pantallas\pantalla_crear_partida.dart","583","icon: const Icon(Icons.add_circle_outline),"
"Icons.play_arrow","lib\pantallas\pantalla_crear_partida.dart","626","icono: Icons.play_arrow,"
"Icons.forum","lib\pantallas\pantalla_debate.dart","94","icono: Icons.forum,"
"Icons.person_off","lib\pantallas\pantalla_debate.dart","110","icono: jugador.eliminado ? Icons.person_off : Icons.record_voice_over,"
"Icons.record_voice_over","lib\pantallas\pantalla_debate.dart","110","icono: jugador.eliminado ? Icons.person_off : Icons.record_voice_over,"
"Icons.edit_note","lib\pantallas\pantalla_debate.dart","126","icono: Icons.edit_note,"
"Icons.how_to_vote","lib\pantallas\pantalla_debate.dart","141","icono: Icons.how_to_vote,"
"Icons.visibility","lib\pantallas\pantalla_debate_cliente.dart","130","icon: const Icon(Icons.visibility),"
"Icons.edit_note","lib\pantallas\pantalla_debate_cliente.dart","141","icon: const Icon(Icons.edit_note),"
"Icons.forum","lib\pantallas\pantalla_debate_cliente.dart","168","icono: Icons.forum,"
"Icons.record_voice_over","lib\pantallas\pantalla_debate_cliente.dart","198","icono: Icons.record_voice_over,"
"Icons.hourglass_empty","lib\pantallas\pantalla_debate_cliente.dart","208","? Icons.hourglass_empty"
"Icons.how_to_vote","lib\pantallas\pantalla_debate_cliente.dart","209",": Icons.how_to_vote,"
"Icons.emoji_events","lib\pantallas\pantalla_fin_partida.dart","122","? Icons.emoji_events"
"Icons.theater_comedy","lib\pantallas\pantalla_fin_partida.dart","123",": Icons.theater_comedy,"
"Icons.theater_comedy","lib\pantallas\pantalla_fin_partida.dart","343","if (icono != Icons.theater_comedy) {"
"Icons.mood","lib\pantallas\pantalla_fin_partida.dart","355","Icons.mood,"
"Icons.sentiment_dissatisfied","lib\pantallas\pantalla_fin_partida.dart","366","Icons.sentiment_dissatisfied,"
"Icons.theater_comedy","lib\pantallas\pantalla_fin_partida.dart","849","const Icon(Icons.theater_comedy, color: TemaApp.colorAcento),"
"Icons.theater_comedy","lib\pantallas\pantalla_fin_partida.dart","870","const Icon(Icons.theater_comedy,"
"Icons.close","lib\pantallas\pantalla_fin_partida.dart","882","const Icon(Icons.close,"
"Icons.replay","lib\pantallas\pantalla_fin_partida.dart","960","icono: Icons.replay,"
"Icons.home","lib\pantallas\pantalla_fin_partida.dart","973","icono: Icons.home,"
"Icons.emoji_events","lib\pantallas\pantalla_fin_partida_online.dart","132","? Icons.emoji_events"
"Icons.theater_comedy","lib\pantallas\pantalla_fin_partida_online.dart","133",": Icons.theater_comedy,"
"Icons.home","lib\pantallas\pantalla_fin_partida_online.dart","166","icono: Icons.home,"
"Icons.visibility","lib\pantallas\pantalla_fin_partida_online.dart","199","icon: const Icon(Icons.visibility),"
"Icons.edit_note","lib\pantallas\pantalla_fin_partida_online.dart","210","icon: const Icon(Icons.edit_note),"
"Icons.visibility","lib\pantallas\pantalla_gestor_host.dart","166","icon: const Icon(Icons.visibility),"
"Icons.edit_note","lib\pantallas\pantalla_gestor_host.dart","182","icon: const Icon(Icons.edit_note),"
"Icons.close","lib\pantallas\pantalla_gestor_host.dart","201","icon: const Icon(Icons.close),"
"Icons.link_off","lib\pantallas\pantalla_gestor_host.dart","266","const Icon(Icons.link_off, color: TemaApp.colorAcento),"
"Icons.person_add_alt_1","lib\pantallas\pantalla_gestor_host.dart","288","icono: Icons.person_add_alt_1,"
"Icons.visibility","lib\pantallas\pantalla_gestor_host.dart","414","icono: Icons.visibility,"
"Icons.visibility","lib\pantallas\pantalla_gestor_host.dart","431","icono: Icons.visibility,"
"Icons.check_circle","lib\pantallas\pantalla_gestor_host.dart","440","icono: Icons.check_circle,"
"Icons.forum","lib\pantallas\pantalla_gestor_host.dart","543","icono: Icons.forum,"
"Icons.record_voice_over","lib\pantallas\pantalla_gestor_host.dart","586","const Icon(Icons.record_voice_over, color: TemaApp.colorNaranja),"
"Icons.how_to_vote","lib\pantallas\pantalla_gestor_host.dart","611","icono: Icons.how_to_vote,"
"Icons.how_to_vote","lib\pantallas\pantalla_gestor_host.dart","632","icono: Icons.how_to_vote,"
"Icons.check_circle","lib\pantallas\pantalla_gestor_host.dart","644","icono: Icons.check_circle,"
"Icons.psychology","lib\pantallas\pantalla_gestor_host.dart","675","icono: Icons.psychology,"
"Icons.emoji_events","lib\pantallas\pantalla_gestor_host.dart","701","icono: ganaronJugadores ? Icons.emoji_events : Icons.theater_comedy,"
"Icons.theater_comedy","lib\pantallas\pantalla_gestor_host.dart","701","icono: ganaronJugadores ? Icons.emoji_events : Icons.theater_comedy,"
"Icons.phone_android","lib\pantallas\pantalla_gestor_host.dart","791","icono: esHost ? Icons.phone_android : Icons.devices,"
"Icons.devices","lib\pantallas\pantalla_gestor_host.dart","791","icono: esHost ? Icons.phone_android : Icons.devices,"
"Icons.forum","lib\pantallas\pantalla_gestor_host.dart","807","icono: Icons.forum,"
"Icons.how_to_vote","lib\pantallas\pantalla_gestor_host.dart","814","icono: Icons.how_to_vote,"
"Icons.visibility","lib\pantallas\pantalla_gestor_host.dart","821","icono: Icons.visibility,"
"Icons.home","lib\pantallas\pantalla_gestor_host.dart","832","icono: Icons.home,"
"Icons.emoji_events","lib\pantallas\pantalla_gestor_host.dart","855","icono: Icons.emoji_events,"
"Icons.psychology","lib\pantallas\pantalla_gestor_host.dart","866","icono: Icons.psychology,"
"Icons.skip_next","lib\pantallas\pantalla_gestor_host.dart","873","icono: Icons.skip_next,"
"Icons.skip_next","lib\pantallas\pantalla_gestor_host.dart","882","icono: Icons.skip_next,"
"Icons.check_circle","lib\pantallas\pantalla_gestor_host.dart","892","icono: Icons.check_circle,"
"Icons.skip_next","lib\pantallas\pantalla_gestor_host.dart","899","icono: Icons.skip_next,"
"Icons.theater_comedy","lib\pantallas\pantalla_gestor_host.dart","1098","? Icons.theater_comedy"
"Icons.key","lib\pantallas\pantalla_gestor_host.dart","1099",": Icons.key,"
"Icons.lock","lib\pantallas\pantalla_gestor_host.dart","1139","Icons.lock,"
"Icons.check","lib\pantallas\pantalla_gestor_host.dart","1190","icono: Icons.check,"
"Icons.history_rounded","lib\pantallas\pantalla_historial.dart","32","icono: Icons.history_rounded,"
"Icons.groups_rounded","lib\pantallas\pantalla_historial.dart","74","? Icons.groups_rounded"
"Icons.theater_comedy_rounded","lib\pantallas\pantalla_historial.dart","75",": Icons.theater_comedy_rounded,"
"Icons.close","lib\pantallas\pantalla_lobby_host.dart","43","icon: const Icon(Icons.close),"
"Icons.wifi_tethering","lib\pantallas\pantalla_lobby_host.dart","65","icono: Icons.wifi_tethering,"
"Icons.person_add","lib\pantallas\pantalla_lobby_host.dart","151","icon: const Icon(Icons.person_add),"
"Icons.play_arrow","lib\pantallas\pantalla_lobby_host.dart","189","icono: Icons.play_arrow,"
"Icons.groups","lib\pantallas\pantalla_lobby_host.dart","219","icon: Icons.groups,"
"Icons.devices","lib\pantallas\pantalla_lobby_host.dart","229","icon: Icons.devices,"
"Icons.close","lib\pantallas\pantalla_lobby_host.dart","333","icon: const Icon(Icons.close),"
"Icons.check_circle_outline","lib\pantallas\pantalla_lobby_host.dart","339","icon: const Icon(Icons.check_circle_outline),"
"Icons.delete_outline","lib\pantallas\pantalla_lobby_host.dart","345","icon: const Icon(Icons.delete_outline, color: TemaApp.colorAcento),"
"Icons.person","lib\pantallas\pantalla_lobby_host.dart","384","prefixIcon: const Icon(Icons.person),"
"Icons.save","lib\pantallas\pantalla_notas.dart","78","icon: const Icon(Icons.save),"
"Icons.arrow_forward_ios","lib\pantallas\pantalla_notas.dart","132","trailing: const Icon(Icons.arrow_forward_ios, size: 16),"
"Icons.arrow_back","lib\pantallas\pantalla_notas.dart","169","icon: const Icon(Icons.arrow_back),"
"Icons.person","lib\pantallas\pantalla_notas.dart","205","prefixIcon: const Icon(Icons.person, size: 20),"
"Icons.note","lib\pantallas\pantalla_notas.dart","226","prefixIcon: const Icon(Icons.note, size: 20),"
"Icons.save","lib\pantallas\pantalla_notas_online.dart","108","icon: const Icon(Icons.save),"
"Icons.edit_note","lib\pantallas\pantalla_notas_online.dart","146","leading: const Icon(Icons.edit_note),"
"Icons.arrow_back","lib\pantallas\pantalla_notas_online.dart","176","icon: const Icon(Icons.arrow_back),"
"Icons.person","lib\pantallas\pantalla_notas_online.dart","208","prefixIcon: const Icon(Icons.person, size: 20),"
"Icons.note","lib\pantallas\pantalla_notas_online.dart","228","prefixIcon: const Icon(Icons.note, size: 20),"
"Icons.visibility","lib\pantallas\pantalla_palabras_cliente.dart","93","_visible ? Icons.visibility : Icons.visibility_off,"
"Icons.visibility_off","lib\pantallas\pantalla_palabras_cliente.dart","93","_visible ? Icons.visibility : Icons.visibility_off,"
"Icons.check","lib\pantallas\pantalla_palabras_cliente.dart","137","icono: _esUltimo ? Icons.check : Icons.arrow_forward,"
"Icons.arrow_forward","lib\pantallas\pantalla_palabras_cliente.dart","137","icono: _esUltimo ? Icons.check : Icons.arrow_forward,"
"Icons.visibility","lib\pantallas\pantalla_palabra_cliente.dart","90","_palabraVisible ? Icons.visibility : Icons.visibility_off,"
"Icons.visibility_off","lib\pantallas\pantalla_palabra_cliente.dart","90","_palabraVisible ? Icons.visibility : Icons.visibility_off,"
"Icons.lightbulb","lib\pantallas\pantalla_palabra_cliente.dart","137","const Icon(Icons.lightbulb, color: TemaApp.colorAcento),"
"Icons.check","lib\pantallas\pantalla_palabra_cliente.dart","172","icono: Icons.check,"
"Icons.play_arrow_rounded","lib\pantallas\pantalla_principal.dart","104","icono: Icons.play_arrow_rounded,"
"Icons.bolt_rounded","lib\pantallas\pantalla_principal.dart","117","icono: Icons.bolt_rounded,"
"Icons.question_mark_rounded","lib\pantallas\pantalla_principal.dart","128","icono: Icons.question_mark_rounded,"
"Icons.settings_rounded","lib\pantallas\pantalla_principal.dart","264","icon: const Icon(Icons.settings_rounded),"
"Icons.history_rounded","lib\pantallas\pantalla_principal.dart","509","const Icon(Icons.history_rounded, color: TemaApp.colorNaranja),"
"Icons.menu_book_rounded","lib\pantallas\pantalla_reglas.dart","30","icono: Icons.menu_book_rounded,"
"Icons.person_search","lib\pantallas\pantalla_reglas.dart","35","_seccion(context, 1, Icons.person_search, l10n.rulesWhatIsTitle, l10n.rulesWhatIsBody),"
"Icons.chat_bubble","lib\pantallas\pantalla_reglas.dart","36","_seccion(context, 2, Icons.chat_bubble, l10n.rulesHowToPlayTitle, l10n.rulesHowToPlayBody),"
"Icons.how_to_vote","lib\pantallas\pantalla_reglas.dart","37","_seccion(context, 3, Icons.how_to_vote, l10n.rulesWhoWinsTitle, l10n.rulesWhoWinsBody),"
"Icons.lightbulb","lib\pantallas\pantalla_reglas.dart","38","_seccion(context, 4, Icons.lightbulb, l10n.rulesTipsPlayersTitle, l10n.rulesTipsPlayersBody),"
"Icons.theater_comedy","lib\pantallas\pantalla_reglas.dart","39","_seccion(context, 5, Icons.theater_comedy, l10n.rulesTipsImpostorTitle, l10n.rulesTipsImpostorBody),"
"Icons.devices","lib\pantallas\pantalla_reglas.dart","40","_seccion(context, 6, Icons.devices, l10n.rulesModesTitle, l10n.rulesModesBody),"
"Icons.emoji_events","lib\pantallas\pantalla_resultado.dart","115","icono: Icons.emoji_events,"
"Icons.gps_fixed","lib\pantallas\pantalla_resultado.dart","130","icono: Icons.gps_fixed,"
"Icons.skip_next","lib\pantallas\pantalla_resultado.dart","143","icono: Icons.skip_next,"
"Icons.skip_next","lib\pantallas\pantalla_resultado.dart","152","icono: Icons.skip_next,"
"Icons.visibility","lib\pantallas\pantalla_resultado_online.dart","194","icon: const Icon(Icons.visibility),"
"Icons.edit_note","lib\pantallas\pantalla_resultado_online.dart","205","icon: const Icon(Icons.edit_note),"
"Icons.visibility","lib\pantallas\pantalla_revision_palabra.dart","34","icono: Icons.visibility,"
"Icons.theater_comedy","lib\pantallas\pantalla_revision_palabra.dart","94","jugador.esImpostor ? Icons.theater_comedy : Icons.key,"
"Icons.key","lib\pantallas\pantalla_revision_palabra.dart","94","jugador.esImpostor ? Icons.theater_comedy : Icons.key,"
"Icons.check","lib\pantallas\pantalla_revision_palabra.dart","123","icono: Icons.check,"
"Icons.phone_android_rounded","lib\pantallas\pantalla_seleccion_modo_juego.dart","36","icono: Icons.phone_android_rounded,"
"Icons.devices_rounded","lib\pantallas\pantalla_seleccion_modo_juego.dart","52","icono: Icons.devices_rounded,"
"Icons.chevron_right_rounded","lib\pantallas\pantalla_seleccion_modo_juego.dart","231","Icon(Icons.chevron_right_rounded, color: color, size: 30),"
"Icons.bluetooth_searching","lib\pantallas\pantalla_unirse.dart","459","icono: Icons.bluetooth_searching,"
"Icons.person","lib\pantallas\pantalla_unirse.dart","470","prefixIcon: const Icon(Icons.person),"
"Icons.search","lib\pantallas\pantalla_unirse.dart","482","icono: Icons.search,"
"Icons.arrow_back","lib\pantallas\pantalla_unirse.dart","512","icon: const Icon(Icons.arrow_back),"
"Icons.sync","lib\pantallas\pantalla_unirse.dart","531","icono: _conectando ? Icons.sync : Icons.radar,"
"Icons.radar","lib\pantallas\pantalla_unirse.dart","531","icono: _conectando ? Icons.sync : Icons.radar,"
"Icons.radar","lib\pantallas\pantalla_unirse.dart","558","icono: Icons.radar,"
"Icons.qr_code_scanner","lib\pantallas\pantalla_unirse.dart","593","icono: Icons.qr_code_scanner,"
"Icons.theater_comedy","lib\pantallas\pantalla_unirse.dart","629","Icons.theater_comedy,"
"Icons.arrow_forward_ios","lib\pantallas\pantalla_unirse.dart","650","Icons.arrow_forward_ios,"
"Icons.arrow_back","lib\pantallas\pantalla_unirse.dart","670","icon: const Icon(Icons.arrow_back),"
"Icons.close","lib\pantallas\pantalla_unirse.dart","717","icon: const Icon(Icons.close),"
"Icons.check_circle","lib\pantallas\pantalla_unirse.dart","740","icono: Icons.check_circle,"
"Icons.add","lib\pantallas\pantalla_unirse.dart","777","Icons.add,"
"Icons.person_add","lib\pantallas\pantalla_unirse.dart","795","icon: const Icon(Icons.person_add),"
"Icons.person","lib\pantallas\pantalla_unirse.dart","826","prefixIcon: const Icon(Icons.person),"
"Icons.close","lib\pantallas\pantalla_unirse.dart","905","icon: const Icon(Icons.close),"
"Icons.visibility","lib\pantallas\pantalla_ver_palabra.dart","44","icono: Icons.visibility,"
"Icons.check_circle","lib\pantallas\pantalla_ver_palabra.dart","60","icono: haVisto ? Icons.check_circle : Icons.visibility,"
"Icons.visibility","lib\pantallas\pantalla_ver_palabra.dart","60","icono: haVisto ? Icons.check_circle : Icons.visibility,"
"Icons.forum","lib\pantallas\pantalla_ver_palabra.dart","74","icono: Icons.forum,"
"Icons.theater_comedy","lib\pantallas\pantalla_ver_palabra.dart","159","icono: widget.esImpostor ? Icons.theater_comedy : Icons.search,"
"Icons.search","lib\pantallas\pantalla_ver_palabra.dart","159","icono: widget.esImpostor ? Icons.theater_comedy : Icons.search,"
"Icons.theater_comedy","lib\pantallas\pantalla_ver_palabra.dart","178","widget.esImpostor ? Icons.theater_comedy : Icons.search,"
"Icons.search","lib\pantallas\pantalla_ver_palabra.dart","178","widget.esImpostor ? Icons.theater_comedy : Icons.search,"
"Icons.lock","lib\pantallas\pantalla_ver_palabra.dart","204","const Icon(Icons.lock, color: TemaApp.colorDorado, size: 52),"
"Icons.check","lib\pantallas\pantalla_ver_palabra.dart","256","icono: Icons.check,"
"Icons.how_to_vote","lib\pantallas\pantalla_votacion.dart","63","icono: Icons.how_to_vote,"
"Icons.person_search","lib\pantallas\pantalla_votacion.dart","81","icono: Icons.person_search,"
"Icons.how_to_vote","lib\pantallas\pantalla_votacion.dart","106","icono: Icons.how_to_vote,"
"Icons.check_circle","lib\pantallas\pantalla_votacion.dart","143","icono: Icons.check_circle,"
"Icons.visibility","lib\pantallas\pantalla_votacion.dart","153","icono: Icons.visibility,"
"Icons.visibility","lib\pantallas\pantalla_votacion_cliente.dart","125","icon: const Icon(Icons.visibility),"
"Icons.edit_note","lib\pantallas\pantalla_votacion_cliente.dart","136","icon: const Icon(Icons.edit_note),"
"Icons.how_to_vote","lib\pantallas\pantalla_votacion_cliente.dart","162","icono: Icons.how_to_vote,"
"Icons.how_to_vote","lib\pantallas\pantalla_votacion_cliente.dart","188","icono: Icons.how_to_vote,"
"Icons.lightbulb","lib\tema\componentes_farolero.dart","234","Icons.lightbulb,"
"Icons.person","lib\tema\componentes_farolero.dart","475","this.icono = Icons.person,"
"Icons.check_circle","lib\tema\componentes_farolero.dart","553","completado ? Icons.check_circle : Icons.hourglass_bottom,"
"Icons.hourglass_bottom","lib\tema\componentes_farolero.dart","553","completado ? Icons.check_circle : Icons.hourglass_bottom,"
"Icons.check","lib\tema\componentes_farolero.dart","583","icono: seleccionado ? Icons.check : Icons.person_search,"
"Icons.person_search","lib\tema\componentes_farolero.dart","583","icono: seleccionado ? Icons.check : Icons.person_search,"
"Icons.bar_chart","lib\tema\componentes_resultado_farolero.dart","125","const Icon(Icons.bar_chart, color: TemaApp.colorNaranja),"
"Icons.how_to_vote","lib\tema\componentes_resultado_farolero.dart","157","fueAlEliminado ? Icons.how_to_vote : Icons.arrow_forward,"
"Icons.arrow_forward","lib\tema\componentes_resultado_farolero.dart","157","fueAlEliminado ? Icons.how_to_vote : Icons.arrow_forward,"
"Icons.theater_comedy","lib\tema\componentes_resultado_farolero.dart","373","if (icono != Icons.theater_comedy) {"
"Icons.mood","lib\tema\componentes_resultado_farolero.dart","384","Icons.mood,"
"Icons.sentiment_dissatisfied","lib\tema\componentes_resultado_farolero.dart","395","Icons.sentiment_dissatisfied,"
"Icons.theater_comedy","lib\tema\componentes_resultado_farolero.dart","807","const Icon(Icons.theater_comedy, color: TemaApp.colorAcento),"
"Icons.theater_comedy","lib\tema\componentes_resultado_farolero.dart","829","Icons.theater_comedy,"
"Icons.close","lib\tema\componentes_resultado_farolero.dart","847","Icons.close,"
1 Icon File Line Text
2 Icons.theater_comedy lib\pantallas\pantalla_adivinanza.dart 73 icono: Icons.theater_comedy,
3 Icons.search lib\pantallas\pantalla_adivinanza.dart 102 prefixIcon: const Icon(Icons.search),
4 Icons.skip_next lib\pantallas\pantalla_adivinanza.dart 116 icono: Icons.skip_next,
5 Icons.send lib\pantallas\pantalla_adivinanza.dart 125 icono: Icons.send,
6 Icons.celebration lib\pantallas\pantalla_adivinanza.dart 147 acierto ? Icons.celebration : Icons.cancel,
7 Icons.cancel lib\pantallas\pantalla_adivinanza.dart 147 acierto ? Icons.celebration : Icons.cancel,
8 Icons.emoji_events lib\pantallas\pantalla_adivinanza.dart 177 icono: acierto ? Icons.emoji_events : Icons.skip_next,
9 Icons.skip_next lib\pantallas\pantalla_adivinanza.dart 177 icono: acierto ? Icons.emoji_events : Icons.skip_next,
10 Icons.check_circle lib\pantallas\pantalla_ajustes.dart 138 ? const Icon(Icons.check_circle, color: TemaApp.colorAcento)
11 Icons.person lib\pantallas\pantalla_ajustes.dart 175 prefixIcon: const Icon(Icons.person),
12 Icons.alternate_email lib\pantallas\pantalla_ajustes.dart 183 prefixIcon: const Icon(Icons.alternate_email),
13 Icons.phone_android lib\pantallas\pantalla_crear_partida.dart 356 icon: const Icon(Icons.phone_android),
14 Icons.devices lib\pantallas\pantalla_crear_partida.dart 361 icon: const Icon(Icons.devices),
15 Icons.devices lib\pantallas\pantalla_crear_partida.dart 386 _modoMultimovil ? Icons.devices : Icons.phone_android,
16 Icons.phone_android lib\pantallas\pantalla_crear_partida.dart 386 _modoMultimovil ? Icons.devices : Icons.phone_android,
17 Icons.add lib\pantallas\pantalla_crear_partida.dart 493 icon: const Icon(Icons.add),
18 Icons.lock lib\pantallas\pantalla_crear_partida.dart 532 ? const Icon(Icons.lock, color: TemaApp.colorDorado)
19 Icons.close lib\pantallas\pantalla_crear_partida.dart 535 Icons.close,
20 Icons.remove_circle_outline lib\pantallas\pantalla_crear_partida.dart 573 icon: const Icon(Icons.remove_circle_outline),
21 Icons.add_circle_outline lib\pantallas\pantalla_crear_partida.dart 583 icon: const Icon(Icons.add_circle_outline),
22 Icons.play_arrow lib\pantallas\pantalla_crear_partida.dart 626 icono: Icons.play_arrow,
23 Icons.forum lib\pantallas\pantalla_debate.dart 94 icono: Icons.forum,
24 Icons.person_off lib\pantallas\pantalla_debate.dart 110 icono: jugador.eliminado ? Icons.person_off : Icons.record_voice_over,
25 Icons.record_voice_over lib\pantallas\pantalla_debate.dart 110 icono: jugador.eliminado ? Icons.person_off : Icons.record_voice_over,
26 Icons.edit_note lib\pantallas\pantalla_debate.dart 126 icono: Icons.edit_note,
27 Icons.how_to_vote lib\pantallas\pantalla_debate.dart 141 icono: Icons.how_to_vote,
28 Icons.visibility lib\pantallas\pantalla_debate_cliente.dart 130 icon: const Icon(Icons.visibility),
29 Icons.edit_note lib\pantallas\pantalla_debate_cliente.dart 141 icon: const Icon(Icons.edit_note),
30 Icons.forum lib\pantallas\pantalla_debate_cliente.dart 168 icono: Icons.forum,
31 Icons.record_voice_over lib\pantallas\pantalla_debate_cliente.dart 198 icono: Icons.record_voice_over,
32 Icons.hourglass_empty lib\pantallas\pantalla_debate_cliente.dart 208 ? Icons.hourglass_empty
33 Icons.how_to_vote lib\pantallas\pantalla_debate_cliente.dart 209 : Icons.how_to_vote,
34 Icons.emoji_events lib\pantallas\pantalla_fin_partida.dart 122 ? Icons.emoji_events
35 Icons.theater_comedy lib\pantallas\pantalla_fin_partida.dart 123 : Icons.theater_comedy,
36 Icons.theater_comedy lib\pantallas\pantalla_fin_partida.dart 343 if (icono != Icons.theater_comedy) {
37 Icons.mood lib\pantallas\pantalla_fin_partida.dart 355 Icons.mood,
38 Icons.sentiment_dissatisfied lib\pantallas\pantalla_fin_partida.dart 366 Icons.sentiment_dissatisfied,
39 Icons.theater_comedy lib\pantallas\pantalla_fin_partida.dart 849 const Icon(Icons.theater_comedy, color: TemaApp.colorAcento),
40 Icons.theater_comedy lib\pantallas\pantalla_fin_partida.dart 870 const Icon(Icons.theater_comedy,
41 Icons.close lib\pantallas\pantalla_fin_partida.dart 882 const Icon(Icons.close,
42 Icons.replay lib\pantallas\pantalla_fin_partida.dart 960 icono: Icons.replay,
43 Icons.home lib\pantallas\pantalla_fin_partida.dart 973 icono: Icons.home,
44 Icons.emoji_events lib\pantallas\pantalla_fin_partida_online.dart 132 ? Icons.emoji_events
45 Icons.theater_comedy lib\pantallas\pantalla_fin_partida_online.dart 133 : Icons.theater_comedy,
46 Icons.home lib\pantallas\pantalla_fin_partida_online.dart 166 icono: Icons.home,
47 Icons.visibility lib\pantallas\pantalla_fin_partida_online.dart 199 icon: const Icon(Icons.visibility),
48 Icons.edit_note lib\pantallas\pantalla_fin_partida_online.dart 210 icon: const Icon(Icons.edit_note),
49 Icons.visibility lib\pantallas\pantalla_gestor_host.dart 166 icon: const Icon(Icons.visibility),
50 Icons.edit_note lib\pantallas\pantalla_gestor_host.dart 182 icon: const Icon(Icons.edit_note),
51 Icons.close lib\pantallas\pantalla_gestor_host.dart 201 icon: const Icon(Icons.close),
52 Icons.link_off lib\pantallas\pantalla_gestor_host.dart 266 const Icon(Icons.link_off, color: TemaApp.colorAcento),
53 Icons.person_add_alt_1 lib\pantallas\pantalla_gestor_host.dart 288 icono: Icons.person_add_alt_1,
54 Icons.visibility lib\pantallas\pantalla_gestor_host.dart 414 icono: Icons.visibility,
55 Icons.visibility lib\pantallas\pantalla_gestor_host.dart 431 icono: Icons.visibility,
56 Icons.check_circle lib\pantallas\pantalla_gestor_host.dart 440 icono: Icons.check_circle,
57 Icons.forum lib\pantallas\pantalla_gestor_host.dart 543 icono: Icons.forum,
58 Icons.record_voice_over lib\pantallas\pantalla_gestor_host.dart 586 const Icon(Icons.record_voice_over, color: TemaApp.colorNaranja),
59 Icons.how_to_vote lib\pantallas\pantalla_gestor_host.dart 611 icono: Icons.how_to_vote,
60 Icons.how_to_vote lib\pantallas\pantalla_gestor_host.dart 632 icono: Icons.how_to_vote,
61 Icons.check_circle lib\pantallas\pantalla_gestor_host.dart 644 icono: Icons.check_circle,
62 Icons.psychology lib\pantallas\pantalla_gestor_host.dart 675 icono: Icons.psychology,
63 Icons.emoji_events lib\pantallas\pantalla_gestor_host.dart 701 icono: ganaronJugadores ? Icons.emoji_events : Icons.theater_comedy,
64 Icons.theater_comedy lib\pantallas\pantalla_gestor_host.dart 701 icono: ganaronJugadores ? Icons.emoji_events : Icons.theater_comedy,
65 Icons.phone_android lib\pantallas\pantalla_gestor_host.dart 791 icono: esHost ? Icons.phone_android : Icons.devices,
66 Icons.devices lib\pantallas\pantalla_gestor_host.dart 791 icono: esHost ? Icons.phone_android : Icons.devices,
67 Icons.forum lib\pantallas\pantalla_gestor_host.dart 807 icono: Icons.forum,
68 Icons.how_to_vote lib\pantallas\pantalla_gestor_host.dart 814 icono: Icons.how_to_vote,
69 Icons.visibility lib\pantallas\pantalla_gestor_host.dart 821 icono: Icons.visibility,
70 Icons.home lib\pantallas\pantalla_gestor_host.dart 832 icono: Icons.home,
71 Icons.emoji_events lib\pantallas\pantalla_gestor_host.dart 855 icono: Icons.emoji_events,
72 Icons.psychology lib\pantallas\pantalla_gestor_host.dart 866 icono: Icons.psychology,
73 Icons.skip_next lib\pantallas\pantalla_gestor_host.dart 873 icono: Icons.skip_next,
74 Icons.skip_next lib\pantallas\pantalla_gestor_host.dart 882 icono: Icons.skip_next,
75 Icons.check_circle lib\pantallas\pantalla_gestor_host.dart 892 icono: Icons.check_circle,
76 Icons.skip_next lib\pantallas\pantalla_gestor_host.dart 899 icono: Icons.skip_next,
77 Icons.theater_comedy lib\pantallas\pantalla_gestor_host.dart 1098 ? Icons.theater_comedy
78 Icons.key lib\pantallas\pantalla_gestor_host.dart 1099 : Icons.key,
79 Icons.lock lib\pantallas\pantalla_gestor_host.dart 1139 Icons.lock,
80 Icons.check lib\pantallas\pantalla_gestor_host.dart 1190 icono: Icons.check,
81 Icons.history_rounded lib\pantallas\pantalla_historial.dart 32 icono: Icons.history_rounded,
82 Icons.groups_rounded lib\pantallas\pantalla_historial.dart 74 ? Icons.groups_rounded
83 Icons.theater_comedy_rounded lib\pantallas\pantalla_historial.dart 75 : Icons.theater_comedy_rounded,
84 Icons.close lib\pantallas\pantalla_lobby_host.dart 43 icon: const Icon(Icons.close),
85 Icons.wifi_tethering lib\pantallas\pantalla_lobby_host.dart 65 icono: Icons.wifi_tethering,
86 Icons.person_add lib\pantallas\pantalla_lobby_host.dart 151 icon: const Icon(Icons.person_add),
87 Icons.play_arrow lib\pantallas\pantalla_lobby_host.dart 189 icono: Icons.play_arrow,
88 Icons.groups lib\pantallas\pantalla_lobby_host.dart 219 icon: Icons.groups,
89 Icons.devices lib\pantallas\pantalla_lobby_host.dart 229 icon: Icons.devices,
90 Icons.close lib\pantallas\pantalla_lobby_host.dart 333 icon: const Icon(Icons.close),
91 Icons.check_circle_outline lib\pantallas\pantalla_lobby_host.dart 339 icon: const Icon(Icons.check_circle_outline),
92 Icons.delete_outline lib\pantallas\pantalla_lobby_host.dart 345 icon: const Icon(Icons.delete_outline, color: TemaApp.colorAcento),
93 Icons.person lib\pantallas\pantalla_lobby_host.dart 384 prefixIcon: const Icon(Icons.person),
94 Icons.save lib\pantallas\pantalla_notas.dart 78 icon: const Icon(Icons.save),
95 Icons.arrow_forward_ios lib\pantallas\pantalla_notas.dart 132 trailing: const Icon(Icons.arrow_forward_ios, size: 16),
96 Icons.arrow_back lib\pantallas\pantalla_notas.dart 169 icon: const Icon(Icons.arrow_back),
97 Icons.person lib\pantallas\pantalla_notas.dart 205 prefixIcon: const Icon(Icons.person, size: 20),
98 Icons.note lib\pantallas\pantalla_notas.dart 226 prefixIcon: const Icon(Icons.note, size: 20),
99 Icons.save lib\pantallas\pantalla_notas_online.dart 108 icon: const Icon(Icons.save),
100 Icons.edit_note lib\pantallas\pantalla_notas_online.dart 146 leading: const Icon(Icons.edit_note),
101 Icons.arrow_back lib\pantallas\pantalla_notas_online.dart 176 icon: const Icon(Icons.arrow_back),
102 Icons.person lib\pantallas\pantalla_notas_online.dart 208 prefixIcon: const Icon(Icons.person, size: 20),
103 Icons.note lib\pantallas\pantalla_notas_online.dart 228 prefixIcon: const Icon(Icons.note, size: 20),
104 Icons.visibility lib\pantallas\pantalla_palabras_cliente.dart 93 _visible ? Icons.visibility : Icons.visibility_off,
105 Icons.visibility_off lib\pantallas\pantalla_palabras_cliente.dart 93 _visible ? Icons.visibility : Icons.visibility_off,
106 Icons.check lib\pantallas\pantalla_palabras_cliente.dart 137 icono: _esUltimo ? Icons.check : Icons.arrow_forward,
107 Icons.arrow_forward lib\pantallas\pantalla_palabras_cliente.dart 137 icono: _esUltimo ? Icons.check : Icons.arrow_forward,
108 Icons.visibility lib\pantallas\pantalla_palabra_cliente.dart 90 _palabraVisible ? Icons.visibility : Icons.visibility_off,
109 Icons.visibility_off lib\pantallas\pantalla_palabra_cliente.dart 90 _palabraVisible ? Icons.visibility : Icons.visibility_off,
110 Icons.lightbulb lib\pantallas\pantalla_palabra_cliente.dart 137 const Icon(Icons.lightbulb, color: TemaApp.colorAcento),
111 Icons.check lib\pantallas\pantalla_palabra_cliente.dart 172 icono: Icons.check,
112 Icons.play_arrow_rounded lib\pantallas\pantalla_principal.dart 104 icono: Icons.play_arrow_rounded,
113 Icons.bolt_rounded lib\pantallas\pantalla_principal.dart 117 icono: Icons.bolt_rounded,
114 Icons.question_mark_rounded lib\pantallas\pantalla_principal.dart 128 icono: Icons.question_mark_rounded,
115 Icons.settings_rounded lib\pantallas\pantalla_principal.dart 264 icon: const Icon(Icons.settings_rounded),
116 Icons.history_rounded lib\pantallas\pantalla_principal.dart 509 const Icon(Icons.history_rounded, color: TemaApp.colorNaranja),
117 Icons.menu_book_rounded lib\pantallas\pantalla_reglas.dart 30 icono: Icons.menu_book_rounded,
118 Icons.person_search lib\pantallas\pantalla_reglas.dart 35 _seccion(context, 1, Icons.person_search, l10n.rulesWhatIsTitle, l10n.rulesWhatIsBody),
119 Icons.chat_bubble lib\pantallas\pantalla_reglas.dart 36 _seccion(context, 2, Icons.chat_bubble, l10n.rulesHowToPlayTitle, l10n.rulesHowToPlayBody),
120 Icons.how_to_vote lib\pantallas\pantalla_reglas.dart 37 _seccion(context, 3, Icons.how_to_vote, l10n.rulesWhoWinsTitle, l10n.rulesWhoWinsBody),
121 Icons.lightbulb lib\pantallas\pantalla_reglas.dart 38 _seccion(context, 4, Icons.lightbulb, l10n.rulesTipsPlayersTitle, l10n.rulesTipsPlayersBody),
122 Icons.theater_comedy lib\pantallas\pantalla_reglas.dart 39 _seccion(context, 5, Icons.theater_comedy, l10n.rulesTipsImpostorTitle, l10n.rulesTipsImpostorBody),
123 Icons.devices lib\pantallas\pantalla_reglas.dart 40 _seccion(context, 6, Icons.devices, l10n.rulesModesTitle, l10n.rulesModesBody),
124 Icons.emoji_events lib\pantallas\pantalla_resultado.dart 115 icono: Icons.emoji_events,
125 Icons.gps_fixed lib\pantallas\pantalla_resultado.dart 130 icono: Icons.gps_fixed,
126 Icons.skip_next lib\pantallas\pantalla_resultado.dart 143 icono: Icons.skip_next,
127 Icons.skip_next lib\pantallas\pantalla_resultado.dart 152 icono: Icons.skip_next,
128 Icons.visibility lib\pantallas\pantalla_resultado_online.dart 194 icon: const Icon(Icons.visibility),
129 Icons.edit_note lib\pantallas\pantalla_resultado_online.dart 205 icon: const Icon(Icons.edit_note),
130 Icons.visibility lib\pantallas\pantalla_revision_palabra.dart 34 icono: Icons.visibility,
131 Icons.theater_comedy lib\pantallas\pantalla_revision_palabra.dart 94 jugador.esImpostor ? Icons.theater_comedy : Icons.key,
132 Icons.key lib\pantallas\pantalla_revision_palabra.dart 94 jugador.esImpostor ? Icons.theater_comedy : Icons.key,
133 Icons.check lib\pantallas\pantalla_revision_palabra.dart 123 icono: Icons.check,
134 Icons.phone_android_rounded lib\pantallas\pantalla_seleccion_modo_juego.dart 36 icono: Icons.phone_android_rounded,
135 Icons.devices_rounded lib\pantallas\pantalla_seleccion_modo_juego.dart 52 icono: Icons.devices_rounded,
136 Icons.chevron_right_rounded lib\pantallas\pantalla_seleccion_modo_juego.dart 231 Icon(Icons.chevron_right_rounded, color: color, size: 30),
137 Icons.bluetooth_searching lib\pantallas\pantalla_unirse.dart 459 icono: Icons.bluetooth_searching,
138 Icons.person lib\pantallas\pantalla_unirse.dart 470 prefixIcon: const Icon(Icons.person),
139 Icons.search lib\pantallas\pantalla_unirse.dart 482 icono: Icons.search,
140 Icons.arrow_back lib\pantallas\pantalla_unirse.dart 512 icon: const Icon(Icons.arrow_back),
141 Icons.sync lib\pantallas\pantalla_unirse.dart 531 icono: _conectando ? Icons.sync : Icons.radar,
142 Icons.radar lib\pantallas\pantalla_unirse.dart 531 icono: _conectando ? Icons.sync : Icons.radar,
143 Icons.radar lib\pantallas\pantalla_unirse.dart 558 icono: Icons.radar,
144 Icons.qr_code_scanner lib\pantallas\pantalla_unirse.dart 593 icono: Icons.qr_code_scanner,
145 Icons.theater_comedy lib\pantallas\pantalla_unirse.dart 629 Icons.theater_comedy,
146 Icons.arrow_forward_ios lib\pantallas\pantalla_unirse.dart 650 Icons.arrow_forward_ios,
147 Icons.arrow_back lib\pantallas\pantalla_unirse.dart 670 icon: const Icon(Icons.arrow_back),
148 Icons.close lib\pantallas\pantalla_unirse.dart 717 icon: const Icon(Icons.close),
149 Icons.check_circle lib\pantallas\pantalla_unirse.dart 740 icono: Icons.check_circle,
150 Icons.add lib\pantallas\pantalla_unirse.dart 777 Icons.add,
151 Icons.person_add lib\pantallas\pantalla_unirse.dart 795 icon: const Icon(Icons.person_add),
152 Icons.person lib\pantallas\pantalla_unirse.dart 826 prefixIcon: const Icon(Icons.person),
153 Icons.close lib\pantallas\pantalla_unirse.dart 905 icon: const Icon(Icons.close),
154 Icons.visibility lib\pantallas\pantalla_ver_palabra.dart 44 icono: Icons.visibility,
155 Icons.check_circle lib\pantallas\pantalla_ver_palabra.dart 60 icono: haVisto ? Icons.check_circle : Icons.visibility,
156 Icons.visibility lib\pantallas\pantalla_ver_palabra.dart 60 icono: haVisto ? Icons.check_circle : Icons.visibility,
157 Icons.forum lib\pantallas\pantalla_ver_palabra.dart 74 icono: Icons.forum,
158 Icons.theater_comedy lib\pantallas\pantalla_ver_palabra.dart 159 icono: widget.esImpostor ? Icons.theater_comedy : Icons.search,
159 Icons.search lib\pantallas\pantalla_ver_palabra.dart 159 icono: widget.esImpostor ? Icons.theater_comedy : Icons.search,
160 Icons.theater_comedy lib\pantallas\pantalla_ver_palabra.dart 178 widget.esImpostor ? Icons.theater_comedy : Icons.search,
161 Icons.search lib\pantallas\pantalla_ver_palabra.dart 178 widget.esImpostor ? Icons.theater_comedy : Icons.search,
162 Icons.lock lib\pantallas\pantalla_ver_palabra.dart 204 const Icon(Icons.lock, color: TemaApp.colorDorado, size: 52),
163 Icons.check lib\pantallas\pantalla_ver_palabra.dart 256 icono: Icons.check,
164 Icons.how_to_vote lib\pantallas\pantalla_votacion.dart 63 icono: Icons.how_to_vote,
165 Icons.person_search lib\pantallas\pantalla_votacion.dart 81 icono: Icons.person_search,
166 Icons.how_to_vote lib\pantallas\pantalla_votacion.dart 106 icono: Icons.how_to_vote,
167 Icons.check_circle lib\pantallas\pantalla_votacion.dart 143 icono: Icons.check_circle,
168 Icons.visibility lib\pantallas\pantalla_votacion.dart 153 icono: Icons.visibility,
169 Icons.visibility lib\pantallas\pantalla_votacion_cliente.dart 125 icon: const Icon(Icons.visibility),
170 Icons.edit_note lib\pantallas\pantalla_votacion_cliente.dart 136 icon: const Icon(Icons.edit_note),
171 Icons.how_to_vote lib\pantallas\pantalla_votacion_cliente.dart 162 icono: Icons.how_to_vote,
172 Icons.how_to_vote lib\pantallas\pantalla_votacion_cliente.dart 188 icono: Icons.how_to_vote,
173 Icons.lightbulb lib\tema\componentes_farolero.dart 234 Icons.lightbulb,
174 Icons.person lib\tema\componentes_farolero.dart 475 this.icono = Icons.person,
175 Icons.check_circle lib\tema\componentes_farolero.dart 553 completado ? Icons.check_circle : Icons.hourglass_bottom,
176 Icons.hourglass_bottom lib\tema\componentes_farolero.dart 553 completado ? Icons.check_circle : Icons.hourglass_bottom,
177 Icons.check lib\tema\componentes_farolero.dart 583 icono: seleccionado ? Icons.check : Icons.person_search,
178 Icons.person_search lib\tema\componentes_farolero.dart 583 icono: seleccionado ? Icons.check : Icons.person_search,
179 Icons.bar_chart lib\tema\componentes_resultado_farolero.dart 125 const Icon(Icons.bar_chart, color: TemaApp.colorNaranja),
180 Icons.how_to_vote lib\tema\componentes_resultado_farolero.dart 157 fueAlEliminado ? Icons.how_to_vote : Icons.arrow_forward,
181 Icons.arrow_forward lib\tema\componentes_resultado_farolero.dart 157 fueAlEliminado ? Icons.how_to_vote : Icons.arrow_forward,
182 Icons.theater_comedy lib\tema\componentes_resultado_farolero.dart 373 if (icono != Icons.theater_comedy) {
183 Icons.mood lib\tema\componentes_resultado_farolero.dart 384 Icons.mood,
184 Icons.sentiment_dissatisfied lib\tema\componentes_resultado_farolero.dart 395 Icons.sentiment_dissatisfied,
185 Icons.theater_comedy lib\tema\componentes_resultado_farolero.dart 807 const Icon(Icons.theater_comedy, color: TemaApp.colorAcento),
186 Icons.theater_comedy lib\tema\componentes_resultado_farolero.dart 829 Icons.theater_comedy,
187 Icons.close lib\tema\componentes_resultado_farolero.dart 847 Icons.close,