uso de imágenes y eliminación de innecesarias
This commit is contained in:
@@ -71,6 +71,7 @@ class _PantallaAdivinanzaState extends State<PantallaAdivinanza> {
|
||||
const SizedBox(height: 12),
|
||||
TarjetaFaseFarolero(
|
||||
icono: Icons.theater_comedy,
|
||||
assetIconPath: 'assets/ui/generated/actions/action_impostor_mask.webp',
|
||||
titulo: l10n.impostorCanGuess,
|
||||
subtitulo: l10n.ifCorrectImpostorsWin,
|
||||
color: TemaApp.colorAcento,
|
||||
|
||||
@@ -69,7 +69,12 @@ class _PantallaAjustesState extends State<PantallaAjustes> {
|
||||
),
|
||||
),
|
||||
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,
|
||||
),
|
||||
],
|
||||
),
|
||||
),
|
||||
|
||||
@@ -151,7 +151,7 @@ class _PantallaCrearPartidaState extends State<PantallaCrearPartida> {
|
||||
|
||||
Future<void> _iniciarPartidaMulti() async {
|
||||
final l10n = AppLocalizations.of(context)!;
|
||||
// 1. Pedir permisos automáticamente
|
||||
// 1. Pedir permisos automáticamente
|
||||
final permisosOk = await ServicioPermisos.solicitarPermisosNearby(context);
|
||||
if (!permisosOk) {
|
||||
if (mounted) {
|
||||
@@ -400,7 +400,7 @@ class _PantallaCrearPartidaState extends State<PantallaCrearPartida> {
|
||||
),
|
||||
const SizedBox(height: 12),
|
||||
],
|
||||
// Categoría
|
||||
// CategorÃÂa
|
||||
Card(
|
||||
child: Padding(
|
||||
padding: const EdgeInsets.fromLTRB(18, 18, 18, 28),
|
||||
@@ -417,7 +417,15 @@ class _PantallaCrearPartidaState extends State<PantallaCrearPartida> {
|
||||
child: DropdownButtonFormField<String>(
|
||||
initialValue: _categoria,
|
||||
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) {
|
||||
return DropdownMenuItem(
|
||||
@@ -465,7 +473,15 @@ class _PantallaCrearPartidaState extends State<PantallaCrearPartida> {
|
||||
controller: _controladorNombre,
|
||||
decoration: InputDecoration(
|
||||
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,
|
||||
onSubmitted: (_) => _agregarJugador(),
|
||||
@@ -530,7 +546,7 @@ class _PantallaCrearPartidaState extends State<PantallaCrearPartida> {
|
||||
const SizedBox(height: 12),
|
||||
],
|
||||
|
||||
// Configuración de partida
|
||||
// Configuración de partida
|
||||
Card(
|
||||
child: Padding(
|
||||
padding: const EdgeInsets.fromLTRB(18, 18, 18, 28),
|
||||
@@ -543,7 +559,7 @@ class _PantallaCrearPartidaState extends State<PantallaCrearPartida> {
|
||||
),
|
||||
const SizedBox(height: 12),
|
||||
|
||||
// Número de impostores
|
||||
// Número de impostores
|
||||
Row(
|
||||
mainAxisAlignment: MainAxisAlignment.spaceBetween,
|
||||
children: [
|
||||
@@ -604,10 +620,11 @@ class _PantallaCrearPartidaState extends State<PantallaCrearPartida> {
|
||||
),
|
||||
const SizedBox(height: 24),
|
||||
|
||||
// Botón iniciar
|
||||
// Botón iniciar
|
||||
BotonFarolero(
|
||||
texto: l10n.startGame,
|
||||
icono: Icons.play_arrow,
|
||||
assetIconPath: 'assets/ui/generated/actions/action_create_game.webp',
|
||||
onPressed: (_modoMultimovil || _jugadores.length >= 3)
|
||||
? _iniciarPartida
|
||||
: null,
|
||||
|
||||
@@ -92,6 +92,7 @@ class _PantallaDebateState extends State<PantallaDebate> {
|
||||
Expanded(
|
||||
child: TarjetaFaseFarolero(
|
||||
icono: Icons.forum,
|
||||
assetIconPath: 'assets/ui/generated/actions/action_rules_book.webp',
|
||||
titulo: l10n.playersInDebate,
|
||||
subtitulo: l10n.activePlayersInfo(
|
||||
partida.jugadoresActivos.length,
|
||||
@@ -107,6 +108,7 @@ class _PantallaDebateState extends State<PantallaDebate> {
|
||||
nombre: '${index + 1}. ${jugador.nombre}',
|
||||
subtitulo: jugador.eliminado ? l10n.eliminated : null,
|
||||
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,
|
||||
completado: !jugador.eliminado,
|
||||
);
|
||||
|
||||
@@ -166,6 +166,7 @@ class _PantallaDebateClienteState extends State<PantallaDebateCliente> {
|
||||
const SizedBox(height: 12),
|
||||
TarjetaFaseFarolero(
|
||||
icono: Icons.forum,
|
||||
assetIconPath: 'assets/ui/generated/actions/action_rules_book.webp',
|
||||
titulo: l10n.debate,
|
||||
subtitulo: l10n.debateInstructions,
|
||||
child: Column(
|
||||
@@ -195,6 +196,7 @@ class _PantallaDebateClienteState extends State<PantallaDebateCliente> {
|
||||
destacado: true,
|
||||
completado: true,
|
||||
icono: Icons.record_voice_over,
|
||||
assetIconPath: 'assets/ui/generated/actions/action_players_group.webp',
|
||||
),
|
||||
const SizedBox(height: 12),
|
||||
],
|
||||
|
||||
@@ -412,10 +412,13 @@ class _TarjetaProgresoGamificacion extends StatelessWidget {
|
||||
),
|
||||
],
|
||||
),
|
||||
child: const Icon(
|
||||
Icons.local_fire_department,
|
||||
color: Color(0xFF1B1010),
|
||||
size: 30,
|
||||
child: Padding(
|
||||
padding: const EdgeInsets.all(7),
|
||||
child: Image.asset(
|
||||
'assets/ui/generated/actions/action_fire_badge.webp',
|
||||
fit: BoxFit.contain,
|
||||
filterQuality: FilterQuality.medium,
|
||||
),
|
||||
),
|
||||
),
|
||||
const SizedBox(width: 14),
|
||||
@@ -582,8 +585,13 @@ class _DeltaFuego extends StatelessWidget {
|
||||
child: Row(
|
||||
mainAxisSize: MainAxisSize.min,
|
||||
children: [
|
||||
const Icon(Icons.local_fire_department,
|
||||
color: TemaApp.colorNaranja, size: 24),
|
||||
Image.asset(
|
||||
'assets/ui/generated/actions/action_fire_badge.webp',
|
||||
width: 26,
|
||||
height: 26,
|
||||
fit: BoxFit.contain,
|
||||
filterQuality: FilterQuality.medium,
|
||||
),
|
||||
const SizedBox(width: 4),
|
||||
Text(
|
||||
texto,
|
||||
@@ -950,6 +958,7 @@ class _BotonesFinPartida extends StatelessWidget {
|
||||
BotonFarolero(
|
||||
texto: l10n.rematch,
|
||||
icono: Icons.replay,
|
||||
assetIconPath: 'assets/ui/generated/actions/action_create_game.webp',
|
||||
onPressed: () {
|
||||
estado.revancha();
|
||||
Navigator.pushReplacement(
|
||||
|
||||
@@ -164,6 +164,7 @@ class _PantallaFinPartidaOnlineState extends State<PantallaFinPartidaOnline> {
|
||||
BotonFarolero.oscuro(
|
||||
texto: l10n.mainMenu,
|
||||
icono: Icons.home,
|
||||
assetIconPath: 'assets/ui/generated/actions/action_result_trophy.webp',
|
||||
onPressed: () async {
|
||||
await context.read<ServicioNearby>().desconectar();
|
||||
if (!context.mounted) return;
|
||||
|
||||
@@ -286,6 +286,7 @@ class _PantallaGestorHostState extends State<PantallaGestorHost> {
|
||||
child: BotonFarolero.oscuro(
|
||||
texto: AppLocalizations.of(context)!.assumeOnThisPhone,
|
||||
icono: Icons.person_add_alt_1,
|
||||
assetIconPath: 'assets/ui/generated/actions/action_add_player.webp',
|
||||
onPressed: () => nearby.asumirUsuariosDesconectados(),
|
||||
),
|
||||
),
|
||||
@@ -411,6 +412,7 @@ class _PantallaGestorHostState extends State<PantallaGestorHost> {
|
||||
) {
|
||||
return TarjetaFaseFarolero(
|
||||
icono: Icons.visibility,
|
||||
assetIconPath: 'assets/ui/generated/actions/action_reveal_word.webp',
|
||||
titulo: l10n.waitingPlayersSeeWord,
|
||||
subtitulo: l10n.connectedPlayers,
|
||||
child: Column(
|
||||
@@ -427,6 +429,7 @@ class _PantallaGestorHostState extends State<PantallaGestorHost> {
|
||||
BotonFarolero(
|
||||
texto: l10n.seeYourWord,
|
||||
icono: Icons.visibility,
|
||||
assetIconPath: 'assets/ui/generated/actions/action_reveal_word.webp',
|
||||
onPressed: () => _mostrarPalabraHost(context),
|
||||
),
|
||||
if (todosListos) ...[
|
||||
@@ -538,6 +541,7 @@ class _PantallaGestorHostState extends State<PantallaGestorHost> {
|
||||
|
||||
return TarjetaFaseFarolero(
|
||||
icono: Icons.forum,
|
||||
assetIconPath: 'assets/ui/generated/actions/action_rules_book.webp',
|
||||
titulo: l10n.debate,
|
||||
subtitulo: l10n.debateInstructions,
|
||||
child: Column(
|
||||
@@ -605,6 +609,7 @@ class _PantallaGestorHostState extends State<PantallaGestorHost> {
|
||||
|
||||
return TarjetaFaseFarolero(
|
||||
icono: Icons.how_to_vote,
|
||||
assetIconPath: 'assets/ui/generated/actions/action_vote_mask.webp',
|
||||
titulo: l10n.voting,
|
||||
subtitulo: l10n.votesProgress(votosEmitidos, totalVotos),
|
||||
color: TemaApp.colorAcento,
|
||||
@@ -668,6 +673,7 @@ class _PantallaGestorHostState extends State<PantallaGestorHost> {
|
||||
: null;
|
||||
return TarjetaFaseFarolero(
|
||||
icono: Icons.psychology,
|
||||
assetIconPath: 'assets/ui/generated/actions/action_impostor_mask.webp',
|
||||
titulo: l10n.impostorGuessTitle,
|
||||
subtitulo: ultimo == null
|
||||
? l10n.impostorCanGuess
|
||||
@@ -783,6 +789,7 @@ class _PantallaGestorHostState extends State<PantallaGestorHost> {
|
||||
destacado: esHost,
|
||||
completado: listo,
|
||||
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,6 +805,7 @@ class _PantallaGestorHostState extends State<PantallaGestorHost> {
|
||||
return BotonFarolero(
|
||||
texto: todosListos ? l10n.allSeenStartDebate : l10n.waitingPlayersSeeWord,
|
||||
icono: Icons.forum,
|
||||
assetIconPath: 'assets/ui/generated/actions/action_rules_book.webp',
|
||||
onPressed: todosListos ? () => _avanzarAFase(FaseJuego.debate) : null,
|
||||
);
|
||||
case FaseJuego.debate:
|
||||
|
||||
@@ -30,6 +30,7 @@ class PantallaHistorial extends StatelessWidget {
|
||||
const SizedBox(height: 12),
|
||||
EstadoVacioFarolero(
|
||||
icono: Icons.history_rounded,
|
||||
assetIconPath: 'assets/ui/generated/actions/action_history_ledger.webp',
|
||||
titulo: l10n.history,
|
||||
subtitulo: l10n.noSavedGames,
|
||||
),
|
||||
|
||||
@@ -8,7 +8,7 @@ import '../servicios/servicio_perfil_usuario.dart';
|
||||
import '../tema/componentes_farolero.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 {
|
||||
final String nombreSala;
|
||||
final VoidCallback onIniciar;
|
||||
@@ -63,6 +63,7 @@ class _PantallaLobbyHostState extends State<PantallaLobbyHost> {
|
||||
const SizedBox(height: 12),
|
||||
EncabezadoFarolero(
|
||||
icono: Icons.wifi_tethering,
|
||||
assetIconPath: 'assets/ui/generated/actions/action_multidevice_signal.webp',
|
||||
titulo: widget.nombreSala,
|
||||
subtitulo: l10n.scanToJoin,
|
||||
),
|
||||
@@ -186,6 +187,7 @@ class _PantallaLobbyHostState extends State<PantallaLobbyHost> {
|
||||
BotonFarolero(
|
||||
texto: _iniciando ? l10n.starting : l10n.startGame,
|
||||
icono: Icons.play_arrow,
|
||||
assetIconPath: 'assets/ui/generated/actions/action_create_game.webp',
|
||||
onPressed: puedeIniciar && !_iniciando
|
||||
? () {
|
||||
setState(() => _iniciando = true);
|
||||
|
||||
@@ -5,7 +5,7 @@ import 'package:farolero/tema/componentes_farolero.dart';
|
||||
import 'package:farolero/tema/tema_app.dart';
|
||||
|
||||
/// 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.
|
||||
class PantallaPalabraCliente extends StatefulWidget {
|
||||
final String palabra;
|
||||
@@ -166,7 +166,7 @@ class _PantallaPalabraClienteState extends State<PantallaPalabraCliente> {
|
||||
),
|
||||
|
||||
const Spacer(),
|
||||
// Botón confirmar
|
||||
// Botón confirmar
|
||||
BotonFarolero(
|
||||
texto: _haRevelado ? l10n.iveSeenIt : l10n.tapToSee,
|
||||
icono: Icons.check,
|
||||
|
||||
@@ -135,6 +135,7 @@ class _PantallaPalabrasClienteState extends State<PantallaPalabrasCliente> {
|
||||
? (_esUltimo ? l10n.iveSeenIt : l10n.next)
|
||||
: l10n.tapToSee,
|
||||
icono: _esUltimo ? Icons.check : Icons.arrow_forward,
|
||||
assetIconPath: 'assets/ui/generated/actions/action_reveal_word.webp',
|
||||
onPressed: _actualRevelado ? _continuar : null,
|
||||
),
|
||||
],
|
||||
|
||||
@@ -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), () {
|
||||
_animController.forward().then((_) {
|
||||
setState(() => _revelado = true);
|
||||
@@ -72,7 +72,7 @@ class _PantallaResultadoState extends State<PantallaResultado>
|
||||
child: Column(
|
||||
mainAxisAlignment: MainAxisAlignment.center,
|
||||
children: [
|
||||
// Animación de suspense
|
||||
// Animación de suspense
|
||||
if (!_revelado) ...[
|
||||
const ArteGameplayFarolero.resultado(height: 152),
|
||||
const SizedBox(height: 16),
|
||||
|
||||
@@ -19,7 +19,7 @@ import 'pantalla_resultado_online.dart';
|
||||
import 'pantalla_fin_partida_online.dart';
|
||||
|
||||
/// 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 {
|
||||
const PantallaUnirse({super.key});
|
||||
|
||||
@@ -64,7 +64,7 @@ class _PantallaUnirseState extends State<PantallaUnirse> {
|
||||
nearby.onMensaje((endpointId, mensaje) {
|
||||
if (!mounted) return;
|
||||
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 jugadoresTodosData =
|
||||
mensaje.datos['jugadoresTodos'] as List<dynamic>?;
|
||||
@@ -303,7 +303,7 @@ class _PantallaUnirseState extends State<PantallaUnirse> {
|
||||
if (!_formKey.currentState!.validate()) return;
|
||||
final l10n = AppLocalizations.of(context)!;
|
||||
|
||||
// Solicitar permisos automáticamente
|
||||
// Solicitar permisos automáticamente
|
||||
final permisosOk = await ServicioPermisos.solicitarPermisosNearby(context);
|
||||
if (!permisosOk) {
|
||||
setState(() {
|
||||
@@ -365,7 +365,7 @@ class _PantallaUnirseState extends State<PantallaUnirse> {
|
||||
_conectando = false;
|
||||
_error = l10n.couldNotConnectToHost(nombreHost);
|
||||
});
|
||||
// Reiniciar búsqueda
|
||||
// Reiniciar búsqueda
|
||||
_iniciarBusqueda();
|
||||
}
|
||||
}
|
||||
@@ -395,7 +395,7 @@ class _PantallaUnirseState extends State<PantallaUnirse> {
|
||||
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>();
|
||||
if (!nearby.buscando) {
|
||||
final servicioPerfil = context.read<ServicioPerfilUsuario>();
|
||||
@@ -419,7 +419,7 @@ class _PantallaUnirseState extends State<PantallaUnirse> {
|
||||
final l10n = AppLocalizations.of(context)!;
|
||||
final nearby = context.watch<ServicioNearby>();
|
||||
|
||||
// Si estamos conectados → pantalla de espera
|
||||
// Si estamos conectados → pantalla de espera
|
||||
if (nearby.conectado && !nearby.esHost) {
|
||||
return _buildPantallaEspera(context, l10n);
|
||||
}
|
||||
@@ -457,6 +457,7 @@ class _PantallaUnirseState extends State<PantallaUnirse> {
|
||||
const SizedBox(height: 14),
|
||||
EncabezadoFarolero(
|
||||
icono: Icons.bluetooth_searching,
|
||||
assetIconPath: 'assets/ui/generated/actions/action_multidevice_signal.webp',
|
||||
titulo: l10n.joinGameTitle,
|
||||
subtitulo: l10n.enterNameToSearch,
|
||||
color: TemaApp.colorAzul,
|
||||
@@ -479,6 +480,7 @@ class _PantallaUnirseState extends State<PantallaUnirse> {
|
||||
BotonFarolero(
|
||||
texto: l10n.searchGames,
|
||||
icono: Icons.search,
|
||||
assetIconPath: 'assets/ui/generated/actions/action_join_search.webp',
|
||||
onPressed: _iniciarBusqueda,
|
||||
),
|
||||
if (_error != null) ...[
|
||||
@@ -527,6 +529,7 @@ class _PantallaUnirseState extends State<PantallaUnirse> {
|
||||
const SizedBox(height: 12),
|
||||
EncabezadoFarolero(
|
||||
icono: _conectando ? Icons.sync : Icons.radar,
|
||||
assetIconPath: _conectando ? null : 'assets/ui/generated/actions/action_join_search.webp',
|
||||
titulo: _conectando
|
||||
? '${l10n.connectingTo} ${_salaSeleccionada ?? ""}...'
|
||||
: l10n.searchingGames,
|
||||
@@ -553,6 +556,7 @@ class _PantallaUnirseState extends State<PantallaUnirse> {
|
||||
? Center(
|
||||
child: EstadoVacioFarolero(
|
||||
icono: Icons.radar,
|
||||
assetIconPath: 'assets/ui/generated/actions/action_join_search.webp',
|
||||
titulo: l10n.noGamesFound,
|
||||
subtitulo: l10n.noGamesFoundHint,
|
||||
),
|
||||
@@ -584,10 +588,11 @@ class _PantallaUnirseState extends State<PantallaUnirse> {
|
||||
const SizedBox(height: 8),
|
||||
SizedBox(
|
||||
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,
|
||||
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) {
|
||||
return Scaffold(
|
||||
@@ -766,7 +771,7 @@ class _PantallaUnirseState extends State<PantallaUnirse> {
|
||||
padding: const EdgeInsets.all(12),
|
||||
child: Column(
|
||||
children: [
|
||||
// Opción crear nuevo usuario (tarea 3.5)
|
||||
// Opción crear nuevo usuario (tarea 3.5)
|
||||
ListTile(
|
||||
leading: const Icon(
|
||||
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 {
|
||||
final l10n = AppLocalizations.of(context)!;
|
||||
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) {
|
||||
final l10n = AppLocalizations.of(context)!;
|
||||
final nearby = context.read<ServicioNearby>();
|
||||
|
||||
@@ -42,6 +42,7 @@ class _PantallaVerPalabraState extends State<PantallaVerPalabra> {
|
||||
const SizedBox(height: 10),
|
||||
TarjetaFaseFarolero(
|
||||
icono: Icons.visibility,
|
||||
assetIconPath: 'assets/ui/generated/actions/action_reveal_word.webp',
|
||||
titulo: l10n.roundNumber(partida.rondaActual),
|
||||
subtitulo: l10n.eachPlayerMustSee,
|
||||
),
|
||||
@@ -57,6 +58,7 @@ class _PantallaVerPalabraState extends State<PantallaVerPalabra> {
|
||||
nombre: '${index + 1}. ${jugador.nombre}',
|
||||
subtitulo: haVisto ? l10n.alreadySeen : l10n.tapToSee,
|
||||
icono: haVisto ? Icons.check_circle : Icons.visibility,
|
||||
assetIconPath: haVisto ? null : 'assets/ui/generated/actions/action_reveal_word.webp',
|
||||
destacado: haVisto,
|
||||
completado: haVisto,
|
||||
onTap: haVisto ? null : () => _mostrarPalabra(context, jugador.id),
|
||||
@@ -70,6 +72,7 @@ class _PantallaVerPalabraState extends State<PantallaVerPalabra> {
|
||||
? l10n.allSeenStartDebate
|
||||
: l10n.playersRemaining(partida.jugadores.length - _hanVisto.length),
|
||||
icono: Icons.forum,
|
||||
assetIconPath: 'assets/ui/generated/actions/action_rules_book.webp',
|
||||
onPressed: todosHanVisto
|
||||
? () {
|
||||
estado.iniciarDebate();
|
||||
@@ -154,6 +157,7 @@ class _PantallaRevelarPalabraState extends State<_PantallaRevelarPalabra> {
|
||||
const SizedBox(height: 12),
|
||||
TarjetaFaseFarolero(
|
||||
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,
|
||||
subtitulo: l10n.holdToSeeWord,
|
||||
color: colorEstado,
|
||||
@@ -250,6 +254,7 @@ class _PantallaRevelarPalabraState extends State<_PantallaRevelarPalabra> {
|
||||
BotonFarolero.secundario(
|
||||
texto: l10n.seenMyWord,
|
||||
icono: Icons.check,
|
||||
assetIconPath: 'assets/ui/generated/actions/action_reveal_word.webp',
|
||||
onPressed: () {
|
||||
widget.onVisto();
|
||||
Navigator.pop(context);
|
||||
|
||||
@@ -61,6 +61,7 @@ class _PantallaVotacionState extends State<PantallaVotacion> {
|
||||
const SizedBox(height: 10),
|
||||
TarjetaFaseFarolero(
|
||||
icono: Icons.how_to_vote,
|
||||
assetIconPath: 'assets/ui/generated/actions/action_vote_mask.webp',
|
||||
titulo: l10n.voteOf(votanteActual.nombre),
|
||||
subtitulo: l10n.votesProgress(estado.votos.length, activos.length),
|
||||
color: TemaApp.colorAcento,
|
||||
@@ -78,6 +79,7 @@ class _PantallaVotacionState extends State<PantallaVotacion> {
|
||||
Expanded(
|
||||
child: TarjetaFaseFarolero(
|
||||
icono: Icons.person_search,
|
||||
assetIconPath: 'assets/ui/generated/actions/action_players_group.webp',
|
||||
titulo: l10n.whoIsImpostor,
|
||||
subtitulo: l10n.selectOnePlayer,
|
||||
color: TemaApp.colorNaranja,
|
||||
@@ -139,6 +141,7 @@ class _PantallaVotacionState extends State<PantallaVotacion> {
|
||||
const SizedBox(height: 24),
|
||||
TarjetaFaseFarolero(
|
||||
icono: Icons.check_circle,
|
||||
assetIconPath: 'assets/ui/generated/actions/action_result_trophy.webp',
|
||||
titulo: l10n.allVoted,
|
||||
subtitulo: l10n.tapToReveal,
|
||||
color: TemaApp.colorVerde,
|
||||
|
||||
@@ -77,6 +77,7 @@ class PanelFarolero extends StatelessWidget {
|
||||
|
||||
class EncabezadoFarolero extends StatelessWidget {
|
||||
final IconData icono;
|
||||
final String? assetIconPath;
|
||||
final String titulo;
|
||||
final String? subtitulo;
|
||||
final Color color;
|
||||
@@ -86,6 +87,7 @@ class EncabezadoFarolero extends StatelessWidget {
|
||||
const EncabezadoFarolero({
|
||||
super.key,
|
||||
required this.icono,
|
||||
this.assetIconPath,
|
||||
required this.titulo,
|
||||
this.subtitulo,
|
||||
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),
|
||||
Expanded(
|
||||
@@ -159,12 +170,14 @@ class EncabezadoFarolero extends StatelessWidget {
|
||||
|
||||
class EstadoVacioFarolero extends StatelessWidget {
|
||||
final IconData icono;
|
||||
final String? assetIconPath;
|
||||
final String titulo;
|
||||
final String subtitulo;
|
||||
|
||||
const EstadoVacioFarolero({
|
||||
super.key,
|
||||
required this.icono,
|
||||
this.assetIconPath,
|
||||
required this.titulo,
|
||||
required this.subtitulo,
|
||||
});
|
||||
@@ -176,7 +189,17 @@ class EstadoVacioFarolero extends StatelessWidget {
|
||||
child: Column(
|
||||
mainAxisSize: MainAxisSize.min,
|
||||
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),
|
||||
Text(
|
||||
titulo,
|
||||
@@ -348,6 +371,7 @@ class BotonFarolero extends StatelessWidget {
|
||||
|
||||
class TarjetaFaseFarolero extends StatelessWidget {
|
||||
final IconData icono;
|
||||
final String? assetIconPath;
|
||||
final String titulo;
|
||||
final String? subtitulo;
|
||||
final Color color;
|
||||
@@ -357,6 +381,7 @@ class TarjetaFaseFarolero extends StatelessWidget {
|
||||
const TarjetaFaseFarolero({
|
||||
super.key,
|
||||
required this.icono,
|
||||
this.assetIconPath,
|
||||
required this.titulo,
|
||||
this.subtitulo,
|
||||
this.color = TemaApp.colorNaranja,
|
||||
@@ -388,7 +413,16 @@ class TarjetaFaseFarolero extends StatelessWidget {
|
||||
),
|
||||
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),
|
||||
Expanded(
|
||||
@@ -429,6 +463,7 @@ class EstadoJugadorFarolero extends StatelessWidget {
|
||||
final bool destacado;
|
||||
final bool completado;
|
||||
final IconData icono;
|
||||
final String? assetIconPath;
|
||||
final String? subtitulo;
|
||||
final VoidCallback? onTap;
|
||||
|
||||
@@ -438,6 +473,7 @@ class EstadoJugadorFarolero extends StatelessWidget {
|
||||
this.destacado = false,
|
||||
this.completado = false,
|
||||
this.icono = Icons.person,
|
||||
this.assetIconPath,
|
||||
this.subtitulo,
|
||||
this.onTap,
|
||||
});
|
||||
@@ -475,7 +511,16 @@ class EstadoJugadorFarolero extends StatelessWidget {
|
||||
color: color.withValues(alpha: 0.16),
|
||||
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),
|
||||
Expanded(
|
||||
@@ -564,7 +609,7 @@ class TemporizadorFarolero extends StatelessWidget {
|
||||
alignment: Alignment.center,
|
||||
children: [
|
||||
Image.asset(
|
||||
'assets/ui/generated/gameplay/gameplay_phase_emblem.webp',
|
||||
'assets/ui/generated/actions/action_timer_hourglass.webp',
|
||||
height: 132,
|
||||
fit: BoxFit.contain,
|
||||
opacity: const AlwaysStoppedAnimation(0.34),
|
||||
|
||||
@@ -590,8 +590,13 @@ class BarraFuegoPremiumFarolero extends StatelessWidget {
|
||||
children: [
|
||||
Row(
|
||||
children: [
|
||||
const Icon(Icons.local_fire_department,
|
||||
color: TemaApp.colorNaranja, size: 18),
|
||||
Image.asset(
|
||||
'assets/ui/generated/actions/action_fire_badge.webp',
|
||||
width: 22,
|
||||
height: 22,
|
||||
fit: BoxFit.contain,
|
||||
filterQuality: FilterQuality.medium,
|
||||
),
|
||||
const SizedBox(width: 6),
|
||||
Text(
|
||||
'${AppLocalizations.of(context)!.fireLabel} '
|
||||
@@ -1147,10 +1152,13 @@ class _IconoFuegoRecompensa extends StatelessWidget {
|
||||
),
|
||||
],
|
||||
),
|
||||
child: const Icon(
|
||||
Icons.local_fire_department,
|
||||
color: Color(0xFF1B1010),
|
||||
size: 30,
|
||||
child: Padding(
|
||||
padding: const EdgeInsets.all(7),
|
||||
child: Image.asset(
|
||||
'assets/ui/generated/actions/action_fire_badge.webp',
|
||||
fit: BoxFit.contain,
|
||||
filterQuality: FilterQuality.medium,
|
||||
),
|
||||
),
|
||||
);
|
||||
}
|
||||
@@ -1185,10 +1193,12 @@ class _DeltaFuegoPremium extends StatelessWidget {
|
||||
child: Row(
|
||||
mainAxisSize: MainAxisSize.min,
|
||||
children: [
|
||||
const Icon(
|
||||
Icons.local_fire_department,
|
||||
color: TemaApp.colorNaranja,
|
||||
size: 24,
|
||||
Image.asset(
|
||||
'assets/ui/generated/actions/action_fire_badge.webp',
|
||||
width: 26,
|
||||
height: 26,
|
||||
fit: BoxFit.contain,
|
||||
filterQuality: FilterQuality.medium,
|
||||
),
|
||||
const SizedBox(width: 4),
|
||||
Text(
|
||||
|
||||
Reference in New Issue
Block a user