This commit is contained in:
2026-05-15 12:43:30 +01:00
parent 1e38c4ad57
commit 332361c296
7 changed files with 1545 additions and 967 deletions

View File

@@ -1,3 +1,4 @@
// ...existing code...
import 'package:supabase_flutter/supabase_flutter.dart';
import 'dart:math';
@@ -81,14 +82,18 @@ class GameSharingController {
.from('profiles')
.select('username, full_name')
.eq('id', createdBy)
.single();
.maybeSingle();
print("👤 Criador: ${creatorData['full_name'] ?? creatorData['username']}");
final creatorName = creatorData != null
? (creatorData['full_name'] ?? creatorData['username'] ?? 'Utilizador')
: 'Utilizador';
print("👤 Criador: $creatorName");
return {
'session_id': session['id'],
'game_id': gameId,
'creator_name': creatorData['full_name'] ?? creatorData['username'] ?? 'Utilizador',
'creator_name': creatorName,
'game': gameData,
};
} catch (e) {
@@ -156,14 +161,16 @@ class GameSharingController {
Future<bool> sendSyncEvent(
String sessionId,
String actionType,
Map<String, dynamic> actionData,
) async {
Map<String, dynamic> actionData, {
String? playerId, // opcional: identifica jogador/entidade alvo
}) async {
try {
await _supabase.from('game_sync_events').insert({
'session_id': sessionId,
'action_type': actionType,
'action_data': actionData,
'triggered_by': myUserId,
if (playerId != null) 'player_id': playerId,
});
print("✅ Evento sincronizado: $actionType");
@@ -186,6 +193,24 @@ class GameSharingController {
.order('created_at', ascending: false);
}
/// Retorna apenas os eventos que NÃO foram disparados pelo utilizador atual.
/// Emite uma lista de eventos (List<Map<String, dynamic>>) por cada atualização.
Stream<List<Map<String, dynamic>>> listenToGameSyncOthers(String sessionId) {
return listenToGameSync(sessionId).map((data) {
List<Map<String, dynamic>> rows = [];
try {
if (data is List) {
rows = List<Map<String, dynamic>>.from(data);
} else if (data is Map) {
rows = [Map<String, dynamic>.from(data)];
}
} catch (_) {
return <Map<String, dynamic>>[];
}
return rows.where((r) => (r['triggered_by'] as String?) != myUserId).toList();
});
}
// ====================================
// 6⃣ OBTER ÚLTIMOS EVENTOS
// ====================================