Rewrote pretty much all of it. New logo/icons. Overall did alot tbh.
This commit is contained in:
parent
5858a4a231
commit
d128768478
142 changed files with 968 additions and 3875 deletions
116
lib/login.dart
116
lib/login.dart
|
|
@ -1,28 +1,9 @@
|
|||
import 'package:flutter/material.dart';
|
||||
import 'eventpicker.dart';
|
||||
import 'package:http/http.dart' as http;
|
||||
import 'dart:convert';
|
||||
import 'core/api.dart';
|
||||
import 'core/theme.dart';
|
||||
import 'package:shared_preferences/shared_preferences.dart';
|
||||
|
||||
void getData(String teamNumber, Function(List<String>, List<String>) callback) async {
|
||||
final response = await http.get(
|
||||
Uri.parse('https://laserscouter.halfheart.net/teamsearch/$teamNumber'),
|
||||
);
|
||||
if (response.statusCode == 200) {
|
||||
String data = response.body;
|
||||
var decodedData = jsonDecode(data);
|
||||
List<String> eventNames = [];
|
||||
List<String> eventCodes = [];
|
||||
|
||||
for (var event in decodedData) {
|
||||
eventNames.add(event['name']);
|
||||
eventCodes.add(event['key']);
|
||||
}
|
||||
callback(eventNames, eventCodes);
|
||||
} else {
|
||||
print(response.statusCode);
|
||||
}
|
||||
}
|
||||
import 'eventpicker.dart';
|
||||
import 'settings.dart';
|
||||
|
||||
void main() {
|
||||
runApp(const MyApp());
|
||||
|
|
@ -35,14 +16,7 @@ class MyApp extends StatelessWidget {
|
|||
Widget build(BuildContext context) {
|
||||
return MaterialApp(
|
||||
title: 'Login Page',
|
||||
theme: ThemeData(
|
||||
useMaterial3: true,
|
||||
primaryColor: const Color.fromARGB(255, 19, 81, 179),
|
||||
appBarTheme: const AppBarTheme(
|
||||
backgroundColor: Color.fromARGB(255, 19, 81, 179),
|
||||
iconTheme: IconThemeData(color: Colors.white),
|
||||
),
|
||||
),
|
||||
theme: laserTheme,
|
||||
home: const LoginPage(),
|
||||
);
|
||||
}
|
||||
|
|
@ -52,12 +26,11 @@ class LoginPage extends StatefulWidget {
|
|||
const LoginPage({super.key});
|
||||
|
||||
@override
|
||||
_LoginPageState createState() => _LoginPageState();
|
||||
}
|
||||
State<LoginPage> createState() => _LoginPageState();}
|
||||
|
||||
class _LoginPageState extends State<LoginPage> {
|
||||
final TextEditingController _teamNumberController = TextEditingController();
|
||||
final TextEditingController _apiKeyController = TextEditingController();
|
||||
bool _isLoading = false;
|
||||
|
||||
@override
|
||||
void initState() {
|
||||
|
|
@ -67,29 +40,25 @@ class _LoginPageState extends State<LoginPage> {
|
|||
|
||||
Future<void> _loadSavedData() async {
|
||||
final prefs = await SharedPreferences.getInstance();
|
||||
_teamNumberController.text = prefs.getString('teamNumber') ?? '';
|
||||
_apiKeyController.text = prefs.getString('apiKey') ?? '';
|
||||
}
|
||||
if (mounted) {
|
||||
_teamNumberController.text = prefs.getString('teamNumber') ?? '';
|
||||
} }
|
||||
|
||||
Future<void> _saveData() async {
|
||||
final prefs = await SharedPreferences.getInstance();
|
||||
await prefs.setString('teamNumber', _teamNumberController.text);
|
||||
await prefs.setString('apiKey', _apiKeyController.text);
|
||||
}
|
||||
|
||||
@override
|
||||
void dispose() {
|
||||
_teamNumberController.dispose();
|
||||
_apiKeyController.dispose();
|
||||
super.dispose();
|
||||
}
|
||||
|
||||
@override
|
||||
Widget build(BuildContext context) {
|
||||
return Scaffold(
|
||||
appBar: AppBar(
|
||||
title: const Text('Login', style: TextStyle(color: Colors.white)),
|
||||
backgroundColor: const Color.fromARGB(255, 19, 81, 179),
|
||||
title: const Text('Login'),
|
||||
),
|
||||
body: Padding(
|
||||
padding: const EdgeInsets.all(16.0),
|
||||
|
|
@ -107,26 +76,67 @@ class _LoginPageState extends State<LoginPage> {
|
|||
),
|
||||
const SizedBox(height: 16.0),
|
||||
ElevatedButton(
|
||||
onPressed: () async {
|
||||
await _saveData();
|
||||
String teamNumber = _teamNumberController.text;
|
||||
getData(teamNumber, (eventNames, eventCodes) {
|
||||
Navigator.push(
|
||||
context,
|
||||
onPressed: _isLoading
|
||||
? null
|
||||
: () async {
|
||||
final navigator = Navigator.of(context);
|
||||
final scaffoldMessenger = ScaffoldMessenger.of(context);
|
||||
|
||||
setState(() {
|
||||
_isLoading = true;
|
||||
});
|
||||
|
||||
try {
|
||||
await _saveData();
|
||||
String teamNumber = _teamNumberController.text;
|
||||
final result = await teamSearch(teamNumber);
|
||||
navigator.push(
|
||||
MaterialPageRoute(
|
||||
builder: (context) => EventPicker(
|
||||
eventNames: eventNames,
|
||||
eventCodes: eventCodes,
|
||||
eventNames: result.eventNames,
|
||||
eventCodes: result.eventCodes,
|
||||
),
|
||||
),
|
||||
);
|
||||
});
|
||||
} catch (e) {
|
||||
scaffoldMessenger.showSnackBar(
|
||||
SnackBar(content: Text('Error: ${e.toString()}')),
|
||||
);
|
||||
} finally {
|
||||
if (mounted) {
|
||||
setState(() {
|
||||
_isLoading = false;
|
||||
});
|
||||
}
|
||||
}
|
||||
},
|
||||
child: const Text('Login'),
|
||||
child: _isLoading
|
||||
? const SizedBox(
|
||||
height: 20,
|
||||
width: 20,
|
||||
child: CircularProgressIndicator(
|
||||
strokeWidth: 2.0,
|
||||
color: Colors.white,
|
||||
),
|
||||
)
|
||||
: const Text('Login'),
|
||||
),
|
||||
const SizedBox(height: 8),
|
||||
ElevatedButton(
|
||||
onPressed: _isLoading
|
||||
? null
|
||||
: () {
|
||||
Navigator.push(
|
||||
context,
|
||||
MaterialPageRoute(
|
||||
builder: (context) => const SettingsPage(),
|
||||
));
|
||||
},
|
||||
child: const Text('Settings'),
|
||||
),
|
||||
],
|
||||
),
|
||||
),
|
||||
);
|
||||
}
|
||||
}
|
||||
}
|
||||
Loading…
Add table
Add a link
Reference in a new issue