import 'package:flutter/material.dart'; import 'package:laserscouter/core/api.dart'; import 'package:shared_preferences/shared_preferences.dart'; import 'package:to_csv/to_csv.dart' as exportcsv; import 'notespage.dart'; // Import the new notes page file class TeamPicker extends StatefulWidget { final String eventCode; const TeamPicker({super.key, required this.eventCode}); @override State createState() => _TeamPickerState(); } class _TeamPickerState extends State { List teamNames = []; List teamCodes = []; bool isLoading = true; String? errorMessage; @override void initState() { super.initState(); // Call the new async method to fetch teams _fetchTeams(); } Future _fetchTeams() async { try { // Await the result from the refactored API function final EventSearchResult result = await eventSearch(widget.eventCode); // Check if the widget is still mounted before updating state if (mounted) { setState(() { teamNames = result.teamNames; teamCodes = result.teamCodes; isLoading = false; }); } } catch (e) { // If an error occurs, update the state to show an error message if (mounted) { setState(() { errorMessage = "Failed to load teams. Please try again."; isLoading = false; }); } } } Future makeCSV() async { List header = [ 'Team Number', 'Bot Position', 'Auton Rundown', 'Can Score Algae', 'Coral Level' ]; List> dataLists = [header]; SharedPreferences prefs = await SharedPreferences.getInstance(); for (int i = 0; i < teamCodes.length; i++) { List data = []; data.add(teamCodes[i]); String botPosition = prefs.getString('${teamCodes[i]}_${widget.eventCode}_note1') ?? ''; String autonRundown = prefs.getString('${teamCodes[i]}_${widget.eventCode}_note2') ?? ''; String canScoreAlgae = prefs.getString('${teamCodes[i]}_${widget.eventCode}_note3') ?? ''; String coralLevel = prefs.getString('${teamCodes[i]}_${widget.eventCode}_note4') ?? '0.0'; data.add(botPosition.trim()); data.add(autonRundown); data.add(canScoreAlgae); data.add(coralLevel); dataLists.add(data); } exportcsv.myCSV(header, dataLists, fileName: '${widget.eventCode}-scouting-data'); } @override Widget build(BuildContext context) { return Scaffold( appBar: AppBar( title: const Text('Teams'), actions: [ IconButton( icon: const Icon(Icons.share), onPressed: isLoading || teamCodes.isEmpty ? null : makeCSV, ), ], ), body: _buildBody(), ); } Widget _buildBody() { if (isLoading) { return const Center(child: CircularProgressIndicator()); } if (errorMessage != null) { return Center( child: Padding( padding: const EdgeInsets.all(16.0), child: Text( errorMessage!, textAlign: TextAlign.center, style: Theme.of(context).textTheme.bodyLarge?.copyWith( color: Colors.red, ), ), ), ); } if (teamCodes.isEmpty) { return const Center( child: Text('No teams found for this event.'), ); } return ListView.builder( itemCount: teamCodes.length, itemBuilder: (context, index) { return ListTile( title: Text('${teamCodes[index]} - ${teamNames[index]}'), onTap: () { Navigator.push( context, MaterialPageRoute( builder: (context) => NotesPage( teamName: teamNames[index], eventCode: widget.eventCode, teamCode: teamCodes[index], ), ), ); }, ); }, ); } }