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
+