smilet/lib/Profile/Profile.dart
2024-06-03 10:41:49 +02:00

191 lines
5.5 KiB
Dart

// ignore_for_file: prefer_const_constructors, prefer_const_literals_to_create_immutables, file_names, use_build_context_synchronously, library_private_types_in_public_api
import 'dart:convert';
import 'package:flutter/material.dart';
import 'package:smilet/LoginPage.dart';
import 'package:smilet/User.dart';
import 'package:smilet/StartPage.dart';
import 'dart:async';
import 'package:http/http.dart' as http;
// Get points for the user
Future<int> getPoints(String username) async {
var response = await http
.get(Uri.parse("http://group-15-3.pvt.dsv.su.se/points/$username"));
if (response.statusCode == 200) {
// If the server did return a 200 OK response,
// then parse the JSON.
return jsonDecode(utf8.decode(response.bodyBytes)) as int;
} else {
// If the server did not return a 200 OK response,
// then return 0.
return 0;
}
}
class Profile extends StatefulWidget {
final User user;
final Map schoolDetails;
const Profile({super.key, required this.user, required this.schoolDetails});
@override
_ProfileState createState() => _ProfileState();
}
class _ProfileState extends State<Profile> {
late Future<int> futurePoints;
String file = "";
@override
void initState() {
super.initState();
futurePoints = getPoints(user.getUsername());
}
@override
Widget build(BuildContext context) {
switch (schoolDetails["school"].toString().toUpperCase()) {
case 'SU':
{
file = "SULogga";
break;
}
case 'KTH':
{
file = "KTHlogga";
break;
}
case 'UU':
{
file = "UUlogga";
break;
}
case 'KI':
{
file = "KIlogga";
break;
}
}
return Center(
child: Column(children: [
SizedBox(
height: 50.0,
),
Text(user.getUsername(),
style: TextStyle(
color: Colors.white,
fontSize: 30,
fontWeight: FontWeight.bold,
)),
SizedBox(
height: 60.0,
),
Container(
width: 180.0,
height: 180.0,
decoration: BoxDecoration(
color: Colors.white,
shape: BoxShape.circle,
border: Border.all(
width: 2.0,
),
),
child: Padding(
padding: const EdgeInsets.all(5),
child: SizedBox(
width: 150,
height: 150,
child:
Image.asset('assets/images/$file.png', fit: BoxFit.fitHeight),
),
),
),
SizedBox(height: 60),
Padding(
padding: const EdgeInsets.only(left: 110),
child: Row(
children: <Widget>[
Icon(Icons.school),
Text(
' Universitet: ${schoolDetails["school"].toString().toUpperCase()}',
style: TextStyle(
color: Colors.white,
fontSize: 20,
fontWeight: FontWeight.bold,
)),
],
),
),
SizedBox(height: 5),
Padding(
padding: const EdgeInsets.only(left: 110),
child: Row(
children: <Widget>[
Icon(Icons.account_balance),
Text(
' Institution: ${schoolDetails["institution"].toString().toUpperCase()}',
style: TextStyle(
color: Colors.white,
fontSize: 20,
fontWeight: FontWeight.bold,
)),
],
),
),
SizedBox(height: 5),
FutureBuilder<int>(
future: futurePoints,
builder: (context, snapshot) {
if (snapshot.hasData) {
return Padding(
padding: const EdgeInsets.only(left: 110),
child: Row(
children: [
Icon(Icons.star),
Text(' Dina poäng: ${snapshot.data!.toString()}',
style: TextStyle(
color: Colors.white,
fontSize: 20,
fontWeight: FontWeight.bold,
)),
],
),
);
} else if (snapshot.hasError) {
return Text('${snapshot.error}');
} else {
return Padding(
padding: const EdgeInsets.only(left: 110),
child: Row(
children: [
Icon(Icons.star),
Text(' Dina poäng:',
style: TextStyle(
color: Colors.white,
fontSize: 20,
fontWeight: FontWeight.bold,
)),
],
),
);
}
}),
Spacer(),
ElevatedButton(
style: TextButton.styleFrom(
backgroundColor: Color.fromARGB(255, 233, 52, 52),
fixedSize: Size(130, 40),
),
onPressed: () {
Navigator.push(context,
MaterialPageRoute(builder: (context) => StartPage()));
},
child: Text('Logga ut',
style: TextStyle(fontSize: 15, color: Colors.white))),
SizedBox(height: 10)
]),
);
}
}