aplicadas correcciones

This commit is contained in:
2026-05-10 22:53:41 +02:00
parent 12af58d828
commit fa7901019f
42 changed files with 2708 additions and 76 deletions

View File

@@ -301,13 +301,13 @@ class _PantallaUnirseState extends State<PantallaUnirse> {
/// Paso 1: validar nombre, pedir permisos e iniciar discovery
Future<void> _iniciarBusqueda() async {
if (!_formKey.currentState!.validate()) return;
final l10n = AppLocalizations.of(context)!;
// Solicitar permisos automáticamente
final permisosOk = await ServicioPermisos.solicitarPermisosNearby(context);
if (!permisosOk) {
setState(() {
_error =
'Se necesitan permisos de Bluetooth y ubicación para buscar partidas.';
_error = l10n.bluetoothLocationPermissionsRequired;
});
return;
}
@@ -332,14 +332,14 @@ class _PantallaUnirseState extends State<PantallaUnirse> {
});
} else {
setState(() {
_error =
'No se pudo iniciar la búsqueda. Verifica Bluetooth y ubicación.';
_error = l10n.couldNotStartSearch;
});
}
}
/// Conectar a un host de la lista
Future<void> _conectarAHost(String endpointId, String nombreHost) async {
final l10n = AppLocalizations.of(context)!;
setState(() {
_conectando = true;
_salaSeleccionada = nombreHost;
@@ -363,7 +363,7 @@ class _PantallaUnirseState extends State<PantallaUnirse> {
if (!ok && mounted) {
setState(() {
_conectando = false;
_error = 'No se pudo conectar a $nombreHost';
_error = l10n.couldNotConnectToHost(nombreHost);
});
// Reiniciar búsqueda
_iniciarBusqueda();
@@ -387,11 +387,12 @@ class _PantallaUnirseState extends State<PantallaUnirse> {
final datos = ServicioNearby.parsearQR(valor);
if (datos != null) {
final l10n = AppLocalizations.of(context)!;
setState(() {
_escaneandoQR = false;
_conectando = true;
_salaSeleccionada =
datos['host'] as String? ?? datos['sala'] as String? ?? 'Sala';
datos['host'] as String? ?? datos['sala'] as String? ?? l10n.room;
});
// Iniciar búsqueda para que Nearby encuentre al host
@@ -530,8 +531,8 @@ class _PantallaUnirseState extends State<PantallaUnirse> {
? '${l10n.connectingTo} ${_salaSeleccionada ?? ""}...'
: l10n.searchingGames,
subtitulo: _conectando
? 'Preparando la sala segura'
: 'Buscando partidas cercanas por Bluetooth',
? l10n.preparingSecureRoom
: l10n.searchingNearbyBluetoothGames,
color: _conectando ? TemaApp.colorAcento : TemaApp.colorNaranja,
trailing: SizedBox(
width: 24,
@@ -560,7 +561,7 @@ class _PantallaUnirseState extends State<PantallaUnirse> {
itemCount: hosts.length,
itemBuilder: (context, index) {
final entry = hosts.entries.elementAt(index);
return _buildHostTile(entry.key, entry.value);
return _buildHostTile(l10n, entry.key, entry.value);
},
),
),
@@ -597,7 +598,11 @@ class _PantallaUnirseState extends State<PantallaUnirse> {
);
}
Widget _buildHostTile(String endpointId, String nombre) {
Widget _buildHostTile(
AppLocalizations l10n,
String endpointId,
String nombre,
) {
return Container(
margin: const EdgeInsets.only(bottom: 10),
child: Material(
@@ -630,7 +635,7 @@ class _PantallaUnirseState extends State<PantallaUnirse> {
style: Theme.of(context).textTheme.titleMedium,
),
Text(
'Toca para unirte',
l10n.tapToJoin,
style: Theme.of(context).textTheme.bodySmall,
),
],
@@ -842,16 +847,18 @@ 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>();
nearby.seleccionarUsuarioSala(usuario.id);
ScaffoldMessenger.of(
context,
).showSnackBar(SnackBar(content: Text('${usuario.nombre} seleccionado')));
).showSnackBar(SnackBar(content: Text(l10n.profileSelected)));
}
Widget _buildUsuarioSalaTile(Usuario usuario) {
final l10n = AppLocalizations.of(context)!;
final nearby = context.read<ServicioNearby>();
final miClientId = nearby.miClientId;
final seleccionadoPorMi = usuario.clienteIdSeleccionado == miClientId;
@@ -872,10 +879,10 @@ class _PantallaUnirseState extends State<PantallaUnirse> {
children: [
Text(
seleccionadoPorMi
? 'Seleccionado por este móvil'
? l10n.selectedOnThisPhone
: seleccionadoPorOtro
? 'No disponible'
: 'Disponible',
? l10n.notAvailable
: l10n.available,
),
if (usuario.medallas.isNotEmpty) ...[
const SizedBox(height: 4),