Files
PlayMaker/lib/pages/PlacarPage.dart
2026-02-03 17:33:40 +00:00

139 lines
4.4 KiB
Dart

import 'dart:async';
import 'package:flutter/material.dart';
class PlacarPage extends StatefulWidget {
final String gameId;
final String myTeam;
final String opponentTeam;
const PlacarPage({
super.key,
required this.gameId,
required this.myTeam,
required this.opponentTeam,
});
@override
State<PlacarPage> createState() => _PlacarPageState();
}
class _PlacarPageState extends State<PlacarPage> {
int _myScore = 0;
int _opponentScore = 0;
// Lógica do Tempo (Exemplo: 10 minutos)
Duration _duration = const Duration(minutes: 10);
Timer? _timer;
bool _isRunning = false;
void _toggleTimer() {
if (_isRunning) {
_timer?.cancel();
} else {
_timer = Timer.periodic(const Duration(seconds: 1), (timer) {
if (_duration.inSeconds > 0) {
setState(() => _duration -= const Duration(seconds: 1));
} else {
_timer?.cancel();
setState(() => _isRunning = false);
}
});
}
setState(() => _isRunning = !_isRunning);
}
String _formatTime(Duration d) {
return "${d.inMinutes.toString().padLeft(2, '0')}:${d.inSeconds.remainder(60).toString().padLeft(2, '0')}";
}
@override
void dispose() {
_timer?.cancel();
super.dispose();
}
@override
Widget build(BuildContext context) {
return Scaffold(
backgroundColor: const Color(0xFF121212),
appBar: AppBar(
title: const Text("Placar Live"),
backgroundColor: Colors.transparent,
foregroundColor: Colors.white,
elevation: 0,
),
body: Column(
children: [
const SizedBox(height: 20),
// Cronómetro
GestureDetector(
onTap: _toggleTimer,
child: Text(
_formatTime(_duration),
style: const TextStyle(color: Colors.white, fontSize: 75, fontWeight: FontWeight.bold, fontFamily: 'monospace'),
),
),
const Text("CLIQUE NO TEMPO PARA INICIAR/PAUSAR", style: TextStyle(color: Colors.grey, fontSize: 10)),
Expanded(
child: Row(
children: [
// Minha Equipa
_buildTeamSide(widget.myTeam, _myScore, (p) => setState(() => _myScore += p), const Color(0xFFE74C3C)),
// Divisor
Container(width: 1, color: Colors.white24, margin: const EdgeInsets.symmetric(vertical: 40)),
// Adversário
_buildTeamSide(widget.opponentTeam, _opponentScore, (p) => setState(() => _opponentScore += p), Colors.blueGrey),
],
),
),
// Botão Finalizar
Padding(
padding: const EdgeInsets.all(20.0),
child: ElevatedButton(
style: ElevatedButton.styleFrom(
backgroundColor: Colors.green,
minimumSize: const Size(double.infinity, 50),
shape: RoundedRectangleBorder(borderRadius: BorderRadius.circular(15)),
),
onPressed: () {
// Aqui podes adicionar a lógica para salvar o resultado final no Controller
Navigator.pop(context);
},
child: const Text("FINALIZAR PARTIDA", style: TextStyle(color: Colors.white, fontWeight: FontWeight.bold)),
),
),
],
),
);
}
Widget _buildTeamSide(String name, int score, Function(int) onAdd, Color color) {
return Expanded(
child: Column(
mainAxisAlignment: MainAxisAlignment.center,
children: [
Text(name, textAlign: TextAlign.center, style: const TextStyle(color: Colors.white, fontSize: 18, fontWeight: FontWeight.bold)),
const SizedBox(height: 10),
Text("$score", style: TextStyle(color: color, fontSize: 80, fontWeight: FontWeight.bold)),
const SizedBox(height: 30),
// Botões de Pontuação
Row(
mainAxisAlignment: MainAxisAlignment.center,
children: [1, 2, 3].map((p) => Padding(
padding: const EdgeInsets.symmetric(horizontal: 4),
child: InkWell(
onTap: () => onAdd(p),
child: CircleAvatar(
backgroundColor: color.withOpacity(0.2),
child: Text("+$p", style: TextStyle(color: color, fontWeight: FontWeight.bold)),
),
),
)).toList(),
),
],
),
);
}
}