Fixed exports, added misssing questions.

This commit is contained in:
Raktbastr 2026-02-22 07:29:10 -06:00
parent dc7de89690
commit b082e78eec
5 changed files with 68 additions and 40 deletions

View file

@ -146,7 +146,7 @@ class _LoginPageState extends State<LoginPage> {
return AlertDialog(
title: const Text('Info'),
content: const Text(
"This app makes use of The Blue Alliance APIv3 through Laser Proxy. No API keys are stored on device. Laser Scouter was created by FRC 2077 Laser Robotics. \n\nVersion: Rebuilt v26.2.14"
"This app makes use of The Blue Alliance APIv3 through Laser Proxy. No API keys are stored on device. Laser Scouter was created by FRC 2077 Laser Robotics. \n\nVersion: Rebuilt v26.2.22"
),
);
}

View file

@ -28,7 +28,7 @@ class _NotesPageState extends State<NotesPage> {
final _generalObservationsController = TextEditingController();
final _autonRundownController = TextEditingController();
final _intakePositionController = TextEditingController();
final _scoreMechanisimController = TextEditingController();
final _scoreMechanismController = TextEditingController();
double _fuelPerCycle = 0;
bool _canDriveUnderTrench = false;
bool _canDriveOverBump = false;
@ -49,7 +49,7 @@ class _NotesPageState extends State<NotesPage> {
_botPositionController.dispose();
_generalObservationsController.dispose();
_intakePositionController.dispose();
_scoreMechanisimController.dispose();
_scoreMechanismController.dispose();
super.dispose();
}
@ -58,7 +58,7 @@ class _NotesPageState extends State<NotesPage> {
}
Future<void> _loadNotes() async {
SharedPreferences prefs = await SharedPreferences.getInstance();
prefs = await SharedPreferences.getInstance();
_botPositionController.text = prefs.getString(_generateKey('botPosition')) ?? '';
_botPositionController.addListener(() => _saveString('botPosition', _botPositionController.text));
@ -72,8 +72,8 @@ class _NotesPageState extends State<NotesPage> {
_intakePositionController.text = prefs.getString(_generateKey('intakePosition')) ?? '';
_intakePositionController.addListener(() => _saveString('intakePosition', _intakePositionController.text));
_scoreMechanisimController.text = prefs.getString(_generateKey('scoreMechanism')) ?? '';
_scoreMechanisimController.addListener(() => _saveString('scoreMechanism', _scoreMechanisimController.text));
_scoreMechanismController.text = prefs.getString(_generateKey('scoreMechanism')) ?? '';
_scoreMechanismController.addListener(() => _saveString('scoreMechanism', _scoreMechanismController.text));
_fuelPerCycle = prefs.getDouble(_generateKey('fuelPerCycle')) ?? 0.0;
_canDriveUnderTrench = prefs.getBool(_generateKey('canDriveUnderTrench')) ?? false;
@ -107,12 +107,12 @@ class _NotesPageState extends State<NotesPage> {
@override
Widget build(BuildContext context) {
return Scaffold(
appBar: AppBar(
title: Text('Notes'),
),
body: _isLoading
? const Center(child: CircularProgressIndicator())
: SafeArea(
appBar: AppBar(
title: Text('Notes'),
),
body: _isLoading
? const Center(child: CircularProgressIndicator())
: SafeArea(
child: Column(
children: [
Padding(
@ -144,7 +144,7 @@ class _NotesPageState extends State<NotesPage> {
),
],
),
)
)
);
}
@ -192,6 +192,15 @@ class _NotesPageState extends State<NotesPage> {
),
),
const SizedBox(height: 16),
TextField(
controller: _intakePositionController,
decoration: const InputDecoration(
labelText: 'Intake Position',
hintText: 'e.g., Ground',
border: OutlineInputBorder(),
),
),
const SizedBox(height: 16),
SwitchListTile(
title: Text('Can Drive Over Bump', style: Theme.of(context).textTheme.titleSmall),
value: _canDriveOverBump,
@ -325,4 +334,4 @@ class _NotesPageState extends State<NotesPage> {
],
);
}
}
}

View file

@ -32,14 +32,17 @@ class _TeamPickerState extends State<TeamPicker> {
Future<void> _exportData() async {
List<String> header = [];
header.add('Team Number');
header.add('Drivetrain Type');
header.add('Has Vision');
header.add('Climb Level');
header.add('Trenchable');
header.add('Fuel Capacity');
header.add('Bot Position');
header.add('Gen. Observations');
header.add('Auton Rundown');
header.add('General Observations');
header.add('Intake Position');
header.add('Can Drive Over Bump');
header.add('Can Go Under Trench');
header.add('Can Give Fuel to HP');
header.add('Climb Level');
header.add('Fuel Capacity');
header.add('Fuel per Cycle');
header.add("Cycle Time");
List<List<String>> data = [];
for (int i = 0; i < teamCodes.length; i++) {
@ -47,41 +50,57 @@ class _TeamPickerState extends State<TeamPicker> {
return '${teamCodes[i]}_${widget.eventCode}_$field';
}
SharedPreferences prefs = await SharedPreferences.getInstance();
String? autonRundown = prefs.getString(generateKey('autonRundown'));
String? botPosition = prefs.getString(generateKey('botPosition'));
String? generalObservations = prefs.getString(generateKey('generalObservations'));
String? driveTrainType = prefs.getString(generateKey('driveTrainType'));
String? hasVision = prefs.getBool(generateKey('hasVision')).toString();
String? autonRundown = prefs.getString(generateKey('autonRundown'));
String? intakePosition = prefs.getString(generateKey('intakePosition'));
String? canDriveOverBump = prefs.getBool(generateKey('canDriveOverBump')).toString();
String? canDriveUnderTrench = prefs.getBool(generateKey('canDriveUnderTrench')).toString();
String? canGiveToHumanPlayer = prefs.getBool(generateKey('canGiveToHumanPlayer')).toString();
String? climbLevel = prefs.getDouble(generateKey('climbLevel')).toString();
String? trenchable = prefs.getBool(generateKey('trenchable')).toString();
String? fuelCapacity = prefs.getDouble(generateKey('fuelCapacity')).toString();
String? fuelPerCycle = prefs.getDouble(generateKey('fuelPerCycle')).toString();
String? cycleTime = prefs.getDouble(generateKey('cycleTime')).toString();
if (hasVision == 'null') {
hasVision = '';
if (canDriveOverBump == 'null') {
canDriveOverBump = '';
}
if (canDriveUnderTrench == 'null') {
canDriveUnderTrench = '';
}
if (canGiveToHumanPlayer == 'null') {
canGiveToHumanPlayer = '';
}
if (climbLevel == 'null') {
climbLevel = '';
}
if (trenchable == 'null') {
trenchable = '';
}
if (fuelCapacity == 'null') {
fuelCapacity = '';
}
if (fuelPerCycle == 'null') {
fuelPerCycle = '';
}
if (cycleTime == 'null') {
cycleTime = '';
}
List<String> teamData = [];
teamData.add(teamCodes[i]);
teamData.add(driveTrainType ?? '');
teamData.add(hasVision);
teamData.add(climbLevel);
teamData.add(trenchable);
teamData.add(fuelCapacity);
teamData.add(botPosition ?? '');
teamData.add(autonRundown ?? '');
teamData.add(generalObservations ?? '');
teamData.add(autonRundown ?? '');
teamData.add(intakePosition ?? '');
teamData.add(canDriveOverBump);
teamData.add(canDriveUnderTrench);
teamData.add(canGiveToHumanPlayer);
teamData.add(climbLevel);
teamData.add(fuelCapacity);
teamData.add(fuelPerCycle);
teamData.add(cycleTime);
data.add(teamData);
}
csv_export.myCSV(header, data, setHeadersInFirstRow: true, emptyRowsConfig: {1: 1}, fileName: 'laserscouter_${widget.eventCode}.csv');
csv_export.myCSV(header, data, setHeadersInFirstRow: true, fileName: 'laserscouter_${widget.eventCode}.csv');
}
Future<void> _fetchTeams() async {