diff --git a/android/app/src/main/AndroidManifest.xml b/android/app/src/main/AndroidManifest.xml index 3be60f6..65fb67b 100644 --- a/android/app/src/main/AndroidManifest.xml +++ b/android/app/src/main/AndroidManifest.xml @@ -1,6 +1,6 @@ + diff --git a/ios/Runner.xcodeproj/xcshareddata/xcschemes/Runner.xcscheme b/ios/Runner.xcodeproj/xcshareddata/xcschemes/Runner.xcscheme index f08940f..6ce5b0b 100644 --- a/ios/Runner.xcodeproj/xcshareddata/xcschemes/Runner.xcscheme +++ b/ios/Runner.xcodeproj/xcshareddata/xcschemes/Runner.xcscheme @@ -51,7 +51,7 @@ eventNames; + final List eventCodes; + final String apiKey; + + EventPicker({required this.eventNames, required this.eventCodes, required this.apiKey}); + @override Widget build(BuildContext context) { return Scaffold( @@ -11,6 +17,25 @@ class EventPicker extends StatelessWidget { backgroundColor: const Color.fromARGB(255, 19, 81, 179), iconTheme: const IconThemeData(color: Colors.white), ), + body: ListView.builder( + itemCount: eventNames.length, + itemBuilder: (context, index) { + return ListTile( + title: Text(eventNames[index]), + onTap: () { + Navigator.push( + context, + MaterialPageRoute( + builder: (context) => TeamPicker( + apiKey: apiKey, + eventCode: eventCodes[index], + ), + ), + ); + }, + ); + }, + ), ); - } // Call the function with the apiKey + } } \ No newline at end of file diff --git a/lib/login.dart b/lib/login.dart index 07a738c..7b17ee0 100644 --- a/lib/login.dart +++ b/lib/login.dart @@ -3,7 +3,7 @@ import 'eventpicker.dart'; import 'package:http/http.dart' as http; import 'dart:convert'; -void getData(String apiKey, teamNumber) async { +void getData(String apiKey, String teamNumber, Function(List, List) callback) async { final response = await http.get( Uri.parse('https://www.thebluealliance.com/api/v3/team/frc$teamNumber/events/2025'), headers: { @@ -13,12 +13,14 @@ void getData(String apiKey, teamNumber) async { if (response.statusCode == 200) { String data = response.body; var decodedData = jsonDecode(data); - List eventNames = []; + List eventNames = []; + List eventCodes = []; for (var event in decodedData) { eventNames.add(event['name']); + eventCodes.add(event['key']); } - print(eventNames); + callback(eventNames, eventCodes); } else { print(response.statusCode); } @@ -64,7 +66,6 @@ class _LoginPageState extends State { super.dispose(); } - @override Widget build(BuildContext context) { return Scaffold( @@ -99,11 +100,18 @@ class _LoginPageState extends State { onPressed: () async { String teamNumber = _teamNumberController.text; String apiKey = _apiKeyController.text; - getData(apiKey, teamNumber); - Navigator.push( - context, - MaterialPageRoute(builder: (context) => EventPicker()), - ); + getData(apiKey, teamNumber, (eventNames, eventCodes) { + Navigator.push( + context, + MaterialPageRoute( + builder: (context) => EventPicker( + eventNames: eventNames, + eventCodes: eventCodes, + apiKey: apiKey, + ), + ), + ); + }); }, child: const Text('Login'), ), @@ -113,4 +121,3 @@ class _LoginPageState extends State { ); } } - diff --git a/lib/teampicker.dart b/lib/teampicker.dart new file mode 100644 index 0000000..9bb0fde --- /dev/null +++ b/lib/teampicker.dart @@ -0,0 +1,73 @@ +import 'package:flutter/material.dart'; +import 'package:http/http.dart' as http; +import 'dart:convert'; + +void getData(String apiKey, String eventCode, Function(List, List) callback) async { + final response = await http.get( + Uri.parse('https://www.thebluealliance.com/api/v3/event/$eventCode/teams'), + headers: { + 'X-TBA-Auth-Key': apiKey, + }, + ); + if (response.statusCode == 200) { + String data = response.body; + var decodedData = jsonDecode(data); + List teamNames = []; + List teamCodes = []; + + for (var event in decodedData) { + teamNames.add(event['nickname']); + teamCodes.add(event['team_number'].toString()); + } + callback(teamNames, teamCodes); + } else { + print(response.statusCode); + } +} + +class TeamPicker extends StatefulWidget { + final String apiKey; + final String eventCode; + + TeamPicker({required this.apiKey, required this.eventCode}); + + @override + _TeamPickerState createState() => _TeamPickerState(); +} + +class _TeamPickerState extends State { + List teamNames = []; + List teamCodes = []; + + @override + void initState() { + super.initState(); + getData(widget.apiKey, widget.eventCode, (names, codes) { + setState(() { + teamNames = names; + teamCodes = codes; + }); + }); + } + + @override + Widget build(BuildContext context) { + return Scaffold( + appBar: AppBar( + title: const Text('Event', style: TextStyle(color: Colors.white)), + backgroundColor: const Color.fromARGB(255, 19, 81, 179), + iconTheme: const IconThemeData(color: Colors.white), + ), + body: ListView.builder( + itemCount: teamCodes.length, + itemBuilder: (context, index) { + return ListTile( + title: Text('${teamCodes[index]} - ${teamNames[index]}'), + onTap: () { + }, + ); + }, + ), + ); + } +} \ No newline at end of file diff --git a/macos/Runner/DebugProfile.entitlements b/macos/Runner/DebugProfile.entitlements index dddb8a3..08c3ab1 100644 --- a/macos/Runner/DebugProfile.entitlements +++ b/macos/Runner/DebugProfile.entitlements @@ -8,5 +8,7 @@ com.apple.security.network.server + com.apple.security.network.client + diff --git a/macos/Runner/Release.entitlements b/macos/Runner/Release.entitlements index 852fa1a..ee95ab7 100644 --- a/macos/Runner/Release.entitlements +++ b/macos/Runner/Release.entitlements @@ -4,5 +4,7 @@ com.apple.security.app-sandbox + com.apple.security.network.client +