continuar a team_page
This commit is contained in:
@@ -1,8 +1,7 @@
|
||||
import 'package:flutter/material.dart';
|
||||
import 'package:playmaker/classe/home.config.dart';
|
||||
import 'package:playmaker/controllers/team_controllers.dart';
|
||||
import 'package:playmaker/grafico%20de%20pizza/grafico.dart';
|
||||
// Certifica-te que o caminho do controller está correto:
|
||||
import 'package:playmaker/pages/teamPage.dart';
|
||||
|
||||
class HomeScreen extends StatefulWidget {
|
||||
const HomeScreen({super.key});
|
||||
@@ -13,9 +12,7 @@ class HomeScreen extends StatefulWidget {
|
||||
|
||||
class _HomeScreenState extends State<HomeScreen> {
|
||||
int _selectedIndex = 0;
|
||||
|
||||
// 1. Instanciar o Controller para aceder ao Supabase
|
||||
final TeamController _teamController = TeamController();
|
||||
|
||||
|
||||
late final List<Widget> _pages;
|
||||
|
||||
@@ -23,10 +20,10 @@ class _HomeScreenState extends State<HomeScreen> {
|
||||
void initState() {
|
||||
super.initState();
|
||||
_pages = [
|
||||
_buildHomeContent(), // Index 0: Home
|
||||
const Center(child: Text('Tela de Jogo')), // Index 1: Jogo
|
||||
_buildTeamsContent(), // Index 2: Equipas (O teu StreamBuilder entra aqui)
|
||||
const Center(child: Text('Tela de Status')), // Index 3: Status
|
||||
_buildHomeContent(),
|
||||
const Center(child: Text('Tela de Jogo')),
|
||||
const TeamsPage(),
|
||||
const Center(child: Text('Tela de Status')),
|
||||
];
|
||||
}
|
||||
|
||||
@@ -90,64 +87,8 @@ class _HomeScreenState extends State<HomeScreen> {
|
||||
|
||||
// --- WIDGETS DE CONTEÚDO ---
|
||||
|
||||
// 2. O teu StreamBuilder foi movido para aqui
|
||||
Widget _buildTeamsContent() {
|
||||
return StreamBuilder<List<Map<String, dynamic>>>(
|
||||
stream: _teamController.teamsStream,
|
||||
builder: (context, snapshot) {
|
||||
// Verificar estado de carregamento
|
||||
if (snapshot.connectionState == ConnectionState.waiting) {
|
||||
return const Center(child: CircularProgressIndicator());
|
||||
}
|
||||
|
||||
// Verificar erros ou lista vazia
|
||||
if (snapshot.hasError) {
|
||||
return Center(child: Text("Erro: ${snapshot.error}"));
|
||||
}
|
||||
if (!snapshot.hasData || snapshot.data!.isEmpty) {
|
||||
return const Center(child: Text("Ainda não tens equipas."));
|
||||
}
|
||||
|
||||
// Obter dados (Lista simples do Supabase)
|
||||
final teams = snapshot.data!;
|
||||
|
||||
return ListView.builder(
|
||||
padding: const EdgeInsets.all(16),
|
||||
itemCount: teams.length,
|
||||
itemBuilder: (context, index) {
|
||||
final team = teams[index];
|
||||
|
||||
// Construção do Card da Equipa
|
||||
return Card(
|
||||
elevation: 2,
|
||||
margin: const EdgeInsets.only(bottom: 12),
|
||||
child: ListTile(
|
||||
leading: CircleAvatar(
|
||||
backgroundColor: HomeConfig.primaryColor,
|
||||
child: Text(
|
||||
team['name'][0].toUpperCase(),
|
||||
style: const TextStyle(color: Colors.white),
|
||||
),
|
||||
),
|
||||
title: Text(
|
||||
team['name'],
|
||||
style: const TextStyle(fontWeight: FontWeight.bold),
|
||||
),
|
||||
subtitle: Text("Época: ${team['season']}"),
|
||||
trailing: IconButton(
|
||||
icon: const Icon(Icons.delete, color: Colors.red),
|
||||
onPressed: () {
|
||||
// Confirmação antes de apagar (Opcional, mas recomendado)
|
||||
_teamController.deleteTeam(team['id']);
|
||||
},
|
||||
),
|
||||
),
|
||||
);
|
||||
},
|
||||
);
|
||||
},
|
||||
);
|
||||
}
|
||||
// REMOVIDO: Widget _buildTeamsContent()...
|
||||
// Motivo: Este código foi movido para dentro de lib/pages/teams_page.dart
|
||||
|
||||
Widget _buildHomeContent() {
|
||||
return SingleChildScrollView(
|
||||
|
||||
84
lib/pages/teamPage.dart
Normal file
84
lib/pages/teamPage.dart
Normal file
@@ -0,0 +1,84 @@
|
||||
import 'package:flutter/material.dart';
|
||||
import '../controllers/team_controller.dart';
|
||||
import '../models/team_model.dart';
|
||||
import '../widgets/team_widgets.dart';
|
||||
|
||||
class TeamsPage extends StatefulWidget {
|
||||
const TeamsPage({super.key});
|
||||
|
||||
@override
|
||||
State<TeamsPage> createState() => _TeamsPageState();
|
||||
}
|
||||
|
||||
class _TeamsPageState extends State<TeamsPage> {
|
||||
final TeamController controller = TeamController();
|
||||
|
||||
@override
|
||||
Widget build(BuildContext context) {
|
||||
return Scaffold(
|
||||
backgroundColor: const Color(0xFFF5F7FA),
|
||||
|
||||
// Título simples no topo (opcional, já tens a BottomNavBar)
|
||||
// appBar: AppBar(title: Text("Minhas Equipas"), automaticallyImplyLeading: false),
|
||||
|
||||
body: StreamBuilder<List<Map<String, dynamic>>>(
|
||||
stream: controller.teamsStream,
|
||||
builder: (context, snapshot) {
|
||||
// Estado de Loading
|
||||
if (snapshot.connectionState == ConnectionState.waiting) {
|
||||
return const Center(child: CircularProgressIndicator());
|
||||
}
|
||||
|
||||
// Estado Vazio
|
||||
if (!snapshot.hasData || snapshot.data!.isEmpty) {
|
||||
return Center(
|
||||
child: Column(
|
||||
mainAxisAlignment: MainAxisAlignment.center,
|
||||
children: const [
|
||||
Icon(Icons.sports_basketball_outlined, size: 60, color: Colors.grey),
|
||||
SizedBox(height: 16),
|
||||
Text(
|
||||
'Ainda não tens equipas.',
|
||||
style: TextStyle(color: Colors.grey, fontSize: 16),
|
||||
),
|
||||
Text(
|
||||
'Clica no + para criar.',
|
||||
style: TextStyle(color: Colors.grey, fontSize: 14),
|
||||
),
|
||||
],
|
||||
),
|
||||
);
|
||||
}
|
||||
|
||||
final teamsData = snapshot.data!;
|
||||
|
||||
// Lista de Equipas
|
||||
return ListView.builder(
|
||||
padding: const EdgeInsets.all(16),
|
||||
itemCount: teamsData.length,
|
||||
itemBuilder: (context, index) {
|
||||
final team = Team.fromMap(teamsData[index]);
|
||||
return TeamCard(team: team, controller: controller);
|
||||
},
|
||||
);
|
||||
},
|
||||
),
|
||||
|
||||
// --- O BOTÃO FLUTUANTE QUE PEDISTE ---
|
||||
floatingActionButton: FloatingActionButton(
|
||||
onPressed: () {
|
||||
showDialog(
|
||||
context: context,
|
||||
builder: (context) => CreateTeamDialog(
|
||||
onConfirm: (name, season, imageUrl) {
|
||||
controller.createTeam(name, season, imageUrl);
|
||||
},
|
||||
),
|
||||
);
|
||||
},
|
||||
backgroundColor: const Color(0xFFE74C3C), // Cor Vermelha
|
||||
child: const Icon(Icons.add, color: Colors.white),
|
||||
),
|
||||
);
|
||||
}
|
||||
}
|
||||
@@ -1,58 +0,0 @@
|
||||
/*import 'package:flutter/material.dart';
|
||||
import 'package:playmaker/controllers/team_controllers.dart';
|
||||
import '../models/team_model.dart';
|
||||
import '../widgets/team_widgets.dart';
|
||||
|
||||
class TeamsPage extends StatelessWidget {
|
||||
const TeamsPage({super.key});
|
||||
|
||||
@override
|
||||
Widget build(BuildContext context) {
|
||||
// Instância única do controlador para esta página
|
||||
final TeamController controller = TeamController();
|
||||
|
||||
return Scaffold(
|
||||
stream: controller.teamsStream,
|
||||
builder: (context, snapshot) {
|
||||
if (snapshot.hasError) return const Center(child: Text('Erro ao carregar'));
|
||||
if (snapshot.connectionState == ConnectionState.waiting) {
|
||||
return const Center(child: CircularProgressIndicator());
|
||||
}
|
||||
|
||||
final docs = snapshot.data!.docs;
|
||||
if (docs.isEmpty) return const Center(child: Text('Nenhuma equipa criada.'));
|
||||
|
||||
return ListView.builder(
|
||||
padding: const EdgeInsets.all(16),
|
||||
itemCount: docs.length,
|
||||
itemBuilder: (context, index) {
|
||||
final team = Team.fromFirestore(
|
||||
docs[index].data() as Map<String, dynamic>,
|
||||
docs[index].id
|
||||
);
|
||||
|
||||
// CORREÇÃO 1: Passar o team E o controller para o Card
|
||||
return TeamCard(team: team, controller: controller);
|
||||
},
|
||||
);
|
||||
},
|
||||
),
|
||||
floatingActionButton: FloatingActionButton(
|
||||
backgroundColor: const Color(0xFFE74C3C),
|
||||
child: const Icon(Icons.add, color: Colors.white),
|
||||
onPressed: () {
|
||||
showDialog(
|
||||
context: context,
|
||||
builder: (context) => CreateTeamDialog(
|
||||
// CORREÇÃO 2: Receber os 3 parâmetros do formulário
|
||||
onConfirm: (name, season, imageUrl) {
|
||||
// Passar os 3 para a função do controlador
|
||||
controller.createTeam(name, season, imageUrl);
|
||||
},
|
||||
),
|
||||
);
|
||||
},
|
||||
),
|
||||
);
|
||||
}
|
||||
}*/
|
||||
Reference in New Issue
Block a user