Implementado:

No se puede marcar “vista” sin revelar la palabra antes.
Se puede volver a ver la palabra durante debate/votación/resultado.
Notas online privadas por partida y jugador.
Tests añadidos para notas scoped.
Ajusté roomId en el payload de inicio para que las notas no se mezclen entre partidas.
This commit is contained in:
2026-05-05 21:49:40 +02:00
parent 1abdeb2f56
commit 6e5e423ab4
12 changed files with 802 additions and 75 deletions

View File

@@ -39,6 +39,7 @@ class _PantallaUnirseState extends State<PantallaUnirse> {
String? _palabraRecibida;
bool _esImpostor = false;
String? _pistaCategoria;
String? _partidaId;
final List<Jugador> _jugadores = [];
final List<JugadorInicioPartida> _jugadoresControlados = [];
@@ -87,8 +88,24 @@ class _PantallaUnirseState extends State<PantallaUnirse> {
} else {
_palabraRecibida = mensaje.datos['palabra'] as String?;
_esImpostor = mensaje.datos['esImpostor'] as bool? ?? false;
if (_palabraRecibida != null) {
_jugadoresControlados.add(
JugadorInicioPartida(
jugadorId: nearby.miClientId ?? '_legacy',
nombre: _nombreController.text.trim().isEmpty
? 'Jugador'
: _nombreController.text.trim(),
esImpostor: _esImpostor,
palabra: _palabraRecibida,
),
);
}
}
_pistaCategoria = mensaje.datos['categoria'] as String?;
_partidaId = (mensaje.datos['roomId'] as String?) ??
nearby.roomId ??
(mensaje.datos['clientId'] as String?) ??
DateTime.now().microsecondsSinceEpoch.toString();
});
// Navegar a pantalla de palabra del cliente
if (mounted && (_jugadoresControlados.isNotEmpty || _palabraRecibida != null)) {
@@ -160,6 +177,10 @@ class _PantallaUnirseState extends State<PantallaUnirse> {
datosFase?['tiempoDebateSegundos'] as int?,
primerTurnoNombre:
datosFase?['primerTurnoNombre'] as String?,
partidaId: _partidaId ?? context.read<ServicioNearby>().roomId,
pistaCategoria: _pistaCategoria,
jugadores: List.unmodifiable(_jugadores),
jugadoresControlados: List.unmodifiable(_jugadoresControlados),
onSolicitarVotacion: () {
final nearby = context.read<ServicioNearby>();
if (nearby.hostEndpointId != null) {
@@ -182,6 +203,8 @@ class _PantallaUnirseState extends State<PantallaUnirse> {
builder: (_) => PantallaVotacionCliente(
jugadores: _jugadores,
jugadoresControlados: List.unmodifiable(_jugadoresControlados),
partidaId: _partidaId ?? context.read<ServicioNearby>().roomId,
pistaCategoria: _pistaCategoria,
onVotos: (votos) {
final nearby = context.read<ServicioNearby>();
if (nearby.hostEndpointId != null) {