NUEVA GESTIÓN DE USUARIOS Y PARTIDAS
This commit is contained in:
@@ -8,6 +8,7 @@ import '../modelos/inicio_partida_multijugador.dart';
|
||||
import '../modelos/jugador.dart';
|
||||
import '../modelos/partida.dart';
|
||||
import '../modelos/snapshot_partida_online.dart';
|
||||
import '../servicios/servicio_historial_partidas.dart';
|
||||
import '../servicios/servicio_nearby.dart';
|
||||
import '../tema/componentes_farolero.dart';
|
||||
import '../tema/tema_app.dart';
|
||||
@@ -29,6 +30,7 @@ class _PantallaGestorHostState extends State<PantallaGestorHost> {
|
||||
Timer? _timer;
|
||||
int _segundosRestantes = 0;
|
||||
bool _hostListo = false;
|
||||
bool _partidaOnlineGuardada = false;
|
||||
String? _primerTurnoId;
|
||||
String? _primerTurnoNombre;
|
||||
final Map<String, bool> _clientesListos = {};
|
||||
@@ -200,6 +202,7 @@ class _PantallaGestorHostState extends State<PantallaGestorHost> {
|
||||
padding: const EdgeInsets.all(16),
|
||||
child: Column(
|
||||
children: [
|
||||
_buildAvisoClientesDesconectados(context, nearby),
|
||||
_buildFaseIndicator(context, partida.fase, l10n),
|
||||
const SizedBox(height: 16),
|
||||
Expanded(
|
||||
@@ -226,6 +229,58 @@ class _PantallaGestorHostState extends State<PantallaGestorHost> {
|
||||
);
|
||||
}
|
||||
|
||||
Widget _buildAvisoClientesDesconectados(
|
||||
BuildContext context,
|
||||
ServicioNearby nearby,
|
||||
) {
|
||||
final sala = nearby.estadoSala;
|
||||
final usuariosAfectados = sala?.usuariosDeClientesDesconectados ?? const [];
|
||||
if (usuariosAfectados.isEmpty) return const SizedBox.shrink();
|
||||
|
||||
return Padding(
|
||||
padding: const EdgeInsets.only(bottom: 12),
|
||||
child: Container(
|
||||
width: double.infinity,
|
||||
padding: const EdgeInsets.all(12),
|
||||
decoration: TemaApp.decoracionPanel(
|
||||
color: TemaApp.colorAcento.withValues(alpha: 0.16),
|
||||
borderColor: TemaApp.colorAcento.withValues(alpha: 0.65),
|
||||
),
|
||||
child: Column(
|
||||
crossAxisAlignment: CrossAxisAlignment.start,
|
||||
children: [
|
||||
Row(
|
||||
children: [
|
||||
const Icon(Icons.link_off, color: TemaApp.colorAcento),
|
||||
const SizedBox(width: 8),
|
||||
Expanded(
|
||||
child: Text(
|
||||
'Hay jugadores con el dispositivo desconectado.',
|
||||
style: Theme.of(context).textTheme.titleSmall,
|
||||
),
|
||||
),
|
||||
],
|
||||
),
|
||||
const SizedBox(height: 6),
|
||||
Text(
|
||||
usuariosAfectados.map((usuario) => usuario.nombre).join(', '),
|
||||
style: Theme.of(context).textTheme.bodySmall,
|
||||
),
|
||||
const SizedBox(height: 8),
|
||||
Align(
|
||||
alignment: Alignment.centerRight,
|
||||
child: OutlinedButton.icon(
|
||||
onPressed: () => nearby.asumirUsuariosDesconectados(),
|
||||
icon: const Icon(Icons.person_add_alt_1),
|
||||
label: const Text('Asumir en este móvil'),
|
||||
),
|
||||
),
|
||||
],
|
||||
),
|
||||
),
|
||||
);
|
||||
}
|
||||
|
||||
Widget _buildFaseIndicator(
|
||||
BuildContext context,
|
||||
FaseJuego fase,
|
||||
@@ -1115,12 +1170,21 @@ class _PantallaGestorHostState extends State<PantallaGestorHost> {
|
||||
final estado = context.read<EstadoJuego>();
|
||||
final nearby = context.read<ServicioNearby>();
|
||||
estado.comprobarFinPartida();
|
||||
await nearby.enviarFinPartida(
|
||||
_snapshot(fase: 'finPartida', revelarFinal: true).toJson(),
|
||||
);
|
||||
final snapshotFinal = _snapshot(fase: 'finPartida', revelarFinal: true)
|
||||
.toJson();
|
||||
await _guardarHistorialOnlineHost(context);
|
||||
await nearby.enviarFinPartida(snapshotFinal);
|
||||
if (mounted) setState(() {});
|
||||
}
|
||||
|
||||
Future<void> _guardarHistorialOnlineHost(BuildContext context) async {
|
||||
if (_partidaOnlineGuardada) return;
|
||||
final partida = context.read<EstadoJuego>().partida;
|
||||
if (partida?.ganador == null) return;
|
||||
_partidaOnlineGuardada = true;
|
||||
await context.read<ServicioHistorialPartidas>().guardarPartida(partida!);
|
||||
}
|
||||
|
||||
Future<void> _iniciarAdivinanzaOnline(BuildContext context) async {
|
||||
final estado = context.read<EstadoJuego>();
|
||||
final nearby = context.read<ServicioNearby>();
|
||||
@@ -1170,9 +1234,10 @@ class _PantallaGestorHostState extends State<PantallaGestorHost> {
|
||||
final acierto = estado.intentarAdivinar(intento);
|
||||
if (acierto) {
|
||||
final nearby = context.read<ServicioNearby>();
|
||||
await nearby.enviarFinPartida(
|
||||
_snapshot(fase: 'finPartida', revelarFinal: true).toJson(),
|
||||
);
|
||||
final snapshotFinal = _snapshot(fase: 'finPartida', revelarFinal: true)
|
||||
.toJson();
|
||||
await _guardarHistorialOnlineHost(context);
|
||||
await nearby.enviarFinPartida(snapshotFinal);
|
||||
if (mounted) setState(() {});
|
||||
return;
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user