import 'package:flutter/material.dart'; import 'package:shared_preferences/shared_preferences.dart'; class TeamAdder extends StatefulWidget { final String eventCode; const TeamAdder({super.key, required this.eventCode}); @override State createState() => _TeamAdderState(); } class _TeamAdderState extends State { final _teamNumberController = TextEditingController(); final _teamNameController = TextEditingController(); List customTeamNumbers = []; List customTeamNames = []; final _formKey = GlobalKey(); @override void initState() { super.initState(); _loadTeams(); } Future _loadTeams() async { final SharedPreferences prefs = await SharedPreferences.getInstance(); setState(() { customTeamNumbers = prefs.getStringList('custom_team_numbers_${widget.eventCode}') ?? []; customTeamNames = prefs.getStringList('custom_team_names_${widget.eventCode}') ?? []; }); } Future _saveTeam() async { if (!_formKey.currentState!.validate()) { return; } final String teamNumber = _teamNumberController.text; final String teamName = _teamNameController.text; setState(() { customTeamNumbers.add(teamNumber); customTeamNames.add(teamName); }); final SharedPreferences prefs = await SharedPreferences.getInstance(); await prefs.setStringList('custom_team_numbers_${widget.eventCode}', customTeamNumbers); await prefs.setStringList('custom_team_names_${widget.eventCode}', customTeamNames); _teamNumberController.clear(); _teamNameController.clear(); if (mounted) { ScaffoldMessenger.of(context).showSnackBar( SnackBar( content: Text('Added Team: $teamNumber - $teamName'), behavior: SnackBarBehavior.floating, margin: const EdgeInsets.all(16.0), ), ); } } @override void dispose() { _teamNumberController.dispose(); _teamNameController.dispose(); super.dispose(); } @override Widget build(BuildContext context) { return Scaffold( appBar: AppBar( title: const Text('Add Team'), ), body: Form( key: _formKey, child: Column( children: [ Padding( padding: const EdgeInsets.all(16.0), child: Column( crossAxisAlignment: CrossAxisAlignment.start, children: [ Text('Add a New Team', style: Theme.of(context).textTheme.titleLarge), const SizedBox(height: 16), TextFormField( controller: _teamNumberController, decoration: const InputDecoration( labelText: 'Team Number', border: OutlineInputBorder(), ), keyboardType: TextInputType.number, validator: (value) { if (value == null || value.isEmpty) { return 'Please enter a team number'; } return null; }, ), const SizedBox(height: 16), TextFormField( controller: _teamNameController, decoration: const InputDecoration( labelText: 'Team Name', border: OutlineInputBorder(), ), validator: (value) { if (value == null || value.isEmpty) { return 'Please enter a team name'; } return null; }, ), const SizedBox(height: 24), SizedBox( width: double.infinity, child: ElevatedButton( onPressed: _saveTeam, child: const Text('Save Team'), ), ), ], ), ), const Divider(height: 32), Padding( padding: const EdgeInsets.symmetric(horizontal: 16.0), child: Text('Saved Teams', style: Theme.of(context).textTheme.titleLarge), ), Expanded( child: ListView.builder( itemCount: customTeamNumbers.length, itemBuilder: (context, index) { return ListTile( title: Text('${customTeamNumbers[index]} - ${customTeamNames[index]}'), ); }, ), ), ], ), ), ); } }