tempo e time out
This commit is contained in:
@@ -56,57 +56,82 @@ class PlacarController {
|
||||
Timer? timer;
|
||||
bool isRunning = false;
|
||||
|
||||
// --- INICIALIZAÇÃO E BD ---
|
||||
Future<void> loadPlayers() async {
|
||||
Future<void> loadPlayers() async {
|
||||
final supabase = Supabase.instance.client;
|
||||
try {
|
||||
// 1. Buscar os IDs das equipas
|
||||
final teamsResponse = await supabase.from('teams').select('id, name').inFilter('name', [myTeam, opponentTeam]);
|
||||
// 1. Limpeza de segurança para evitar duplicados em "Hot Reload"
|
||||
myCourt.clear(); myBench.clear(); oppCourt.clear(); oppBench.clear();
|
||||
playerStats.clear(); playerNumbers.clear(); playerDbIds.clear();
|
||||
myFouls = 0; opponentFouls = 0;
|
||||
|
||||
await Future.delayed(const Duration(milliseconds: 1500));
|
||||
|
||||
// 2. Buscar dados do JOGO (Placar)
|
||||
final gameResponse = await supabase.from('games').select().eq('id', gameId).single();
|
||||
myScore = gameResponse['my_score'] ?? 0;
|
||||
opponentScore = gameResponse['opponent_score'] ?? 0;
|
||||
|
||||
// 3. Buscar IDs das Equipas
|
||||
final teamsResponse = await supabase.from('teams').select('id, name').inFilter('name', [myTeam, opponentTeam]);
|
||||
for (var t in teamsResponse) {
|
||||
if (t['name'] == myTeam) myTeamDbId = t['id'];
|
||||
if (t['name'] == opponentTeam) oppTeamDbId = t['id'];
|
||||
}
|
||||
|
||||
// 2. Buscar os Jogadores
|
||||
List<dynamic> myPlayers = myTeamDbId != null ? await supabase.from('members').select().eq('team_id', myTeamDbId!).eq('type', 'Jogador') : [];
|
||||
List<dynamic> oppPlayers = oppTeamDbId != null ? await supabase.from('members').select().eq('team_id', oppTeamDbId!).eq('type', 'Jogador') : [];
|
||||
// 4. Buscar Membros e ESTATÍSTICAS existentes
|
||||
final myPlayers = myTeamDbId != null ? await supabase.from('members').select().eq('team_id', myTeamDbId!).eq('type', 'Jogador') : [];
|
||||
final oppPlayers = oppTeamDbId != null ? await supabase.from('members').select().eq('team_id', oppTeamDbId!).eq('type', 'Jogador') : [];
|
||||
|
||||
// Buscar todas as stats deste jogo de uma vez
|
||||
final statsResponse = await supabase.from('player_stats').select().eq('game_id', gameId);
|
||||
final Map<String, dynamic> savedStatsMap = {
|
||||
for (var s in statsResponse) s['member_id'].toString(): s
|
||||
};
|
||||
|
||||
// 3. Registar a tua equipa
|
||||
// 5. Processar Minha Equipa
|
||||
for (int i = 0; i < myPlayers.length; i++) {
|
||||
_registerPlayer(
|
||||
name: myPlayers[i]['name'].toString(),
|
||||
number: myPlayers[i]['number']?.toString() ?? "0",
|
||||
dbId: myPlayers[i]['id'].toString(), // Guarda o UUID real
|
||||
isMyTeam: true,
|
||||
isCourt: i < 5
|
||||
);
|
||||
String dbId = myPlayers[i]['id'].toString();
|
||||
String name = myPlayers[i]['name'].toString();
|
||||
_registerPlayer(name: name, number: myPlayers[i]['number']?.toString() ?? "0", dbId: dbId, isMyTeam: true, isCourt: i < 5);
|
||||
|
||||
if (savedStatsMap.containsKey(dbId)) {
|
||||
_injectStats(name, savedStatsMap[dbId], true);
|
||||
}
|
||||
}
|
||||
_padTeam(myCourt, myBench, "Jogador", isMyTeam: true);
|
||||
|
||||
// 4. Registar a equipa adversária
|
||||
// 6. Processar Adversário
|
||||
for (int i = 0; i < oppPlayers.length; i++) {
|
||||
_registerPlayer(
|
||||
name: oppPlayers[i]['name'].toString(),
|
||||
number: oppPlayers[i]['number']?.toString() ?? "0",
|
||||
dbId: oppPlayers[i]['id'].toString(), // Guarda o UUID real
|
||||
isMyTeam: false,
|
||||
isCourt: i < 5
|
||||
);
|
||||
String dbId = oppPlayers[i]['id'].toString();
|
||||
String name = oppPlayers[i]['name'].toString();
|
||||
_registerPlayer(name: name, number: oppPlayers[i]['number']?.toString() ?? "0", dbId: dbId, isMyTeam: false, isCourt: i < 5);
|
||||
|
||||
if (savedStatsMap.containsKey(dbId)) {
|
||||
_injectStats(name, savedStatsMap[dbId], false);
|
||||
}
|
||||
}
|
||||
_padTeam(oppCourt, oppBench, "Adversário", isMyTeam: false);
|
||||
|
||||
isLoading = false;
|
||||
onUpdate();
|
||||
} catch (e) {
|
||||
debugPrint("Erro ao carregar jogadores: $e");
|
||||
_padTeam(myCourt, myBench, "Falha", isMyTeam: true);
|
||||
_padTeam(oppCourt, oppBench, "Falha Opp", isMyTeam: false);
|
||||
debugPrint("Erro ao carregar: $e");
|
||||
isLoading = false;
|
||||
onUpdate();
|
||||
}
|
||||
}
|
||||
|
||||
// Função auxiliar para injetar os dados salvos
|
||||
void _injectStats(String playerName, Map<String, dynamic> s, bool isMyTeam) {
|
||||
playerStats[playerName] = {
|
||||
"pts": s['pts'] ?? 0, "rbs": s['rbs'] ?? 0, "ast": s['ast'] ?? 0,
|
||||
"stl": s['stl'] ?? 0, "tov": s['tov'] ?? 0, "blk": s['blk'] ?? 0,
|
||||
"fls": s['fls'] ?? 0, "fgm": s['fgm'] ?? 0, "fga": s['fga'] ?? 0,
|
||||
};
|
||||
if (isMyTeam) myFouls += (s['fls'] as int? ?? 0);
|
||||
else opponentFouls += (s['fls'] as int? ?? 0);
|
||||
}
|
||||
|
||||
void _registerPlayer({required String name, required String number, String? dbId, required bool isMyTeam, required bool isCourt}) {
|
||||
if (playerNumbers.containsKey(name)) name = "$name (Opp)";
|
||||
|
||||
|
||||
Reference in New Issue
Block a user