Migrate from BitBucket
This commit is contained in:
@@ -0,0 +1,109 @@
|
||||
import 'package:intl/intl.dart';
|
||||
import 'package:school_management_system/api/student_requests.dart';
|
||||
|
||||
late DateTime dateOfBirth;
|
||||
|
||||
Map<String, dynamic> getPersonalDetails(Student studentDetail) {
|
||||
Map<String, dynamic> personalDetails = {};
|
||||
|
||||
if (studentDetail.dateofbirth != null) {
|
||||
dateOfBirth = studentDetail.dateofbirth!;
|
||||
} else {
|
||||
dateOfBirth = DateTime.now();
|
||||
}
|
||||
|
||||
personalDetails.addEntries({'Title': studentDetail.title}.entries);
|
||||
personalDetails.addEntries({
|
||||
'Full Name': "${studentDetail.firstname} ${studentDetail.lastname}"
|
||||
}.entries);
|
||||
personalDetails.addEntries({'Gender': studentDetail.gender}.entries);
|
||||
personalDetails.addEntries({
|
||||
'Date of Birth': DateFormat('MMMM, dd yyyy').format(dateOfBirth)
|
||||
}.entries);
|
||||
personalDetails
|
||||
.addEntries({'Current Year': studentDetail.currentyear}.entries);
|
||||
personalDetails
|
||||
.addEntries({'Current Session': studentDetail.currentsession}.entries);
|
||||
personalDetails.addEntries({
|
||||
'Course of Study': studentDetail.coursedetails![0].courseofstudy
|
||||
}.entries);
|
||||
personalDetails.addEntries(
|
||||
{'Course Type': studentDetail.coursedetails![0].coursetype}.entries);
|
||||
personalDetails.addEntries({
|
||||
'Course Qualification': studentDetail.coursedetails![0].coursequalification
|
||||
}.entries);
|
||||
personalDetails.addEntries(
|
||||
{'Course Mode': studentDetail.coursedetails![0].coursemode}.entries);
|
||||
|
||||
return personalDetails;
|
||||
}
|
||||
|
||||
Map<String, dynamic> getContactDetails(Student studentDetail) {
|
||||
Map<String, dynamic> contactDetails = {};
|
||||
|
||||
contactDetails
|
||||
.addEntries({'Home Address': studentDetail.homeaddress}.entries);
|
||||
contactDetails
|
||||
.addEntries({'Mobile Number': studentDetail.mobilenumber}.entries);
|
||||
contactDetails
|
||||
.addEntries({'E-Mail Address': studentDetail.emailaddress}.entries);
|
||||
contactDetails
|
||||
.addEntries({'School Email': studentDetail.schoolemail}.entries);
|
||||
contactDetails.addEntries({
|
||||
'Next of Kin Name ': studentDetail.nextofkindetails![0].nextofkinname
|
||||
}.entries);
|
||||
contactDetails.addEntries({
|
||||
'Next of Kin Contact ': studentDetail.nextofkindetails![0].nextofkincontact
|
||||
}.entries);
|
||||
contactDetails.addEntries({
|
||||
'Next of Kin Address ': studentDetail.nextofkindetails![0].nextofkinaddress
|
||||
}.entries);
|
||||
contactDetails.addEntries({
|
||||
'Next of Kin Relationship ': studentDetail.nextofkindetails![0].nextofkinrelationship
|
||||
}.entries);
|
||||
contactDetails.addEntries({
|
||||
'Guardian Name ': studentDetail.guardiandetails![0].guardianname
|
||||
}.entries);
|
||||
contactDetails.addEntries({
|
||||
'Guardian Contact ': studentDetail.guardiandetails![0].guardiancontact
|
||||
}.entries);
|
||||
contactDetails.addEntries({
|
||||
'Guardian Address ': studentDetail.guardiandetails![0].guardianaddress
|
||||
}.entries);
|
||||
contactDetails.addEntries({
|
||||
'Guardian Relationship ': studentDetail.guardiandetails![0].guardianrelationship
|
||||
}.entries);
|
||||
|
||||
return contactDetails;
|
||||
}
|
||||
|
||||
Map<String, dynamic> getMedicalDetails(Student studentDetail) {
|
||||
Map<String, dynamic> medicalDetails = {};
|
||||
|
||||
medicalDetails
|
||||
.addEntries({'Weight': studentDetail.medicaldetails![0].weight}.entries);
|
||||
medicalDetails
|
||||
.addEntries({'Height': studentDetail.medicaldetails![0].height}.entries);
|
||||
medicalDetails.addEntries(
|
||||
{'Genotype': studentDetail.medicaldetails![0].genotype}.entries);
|
||||
medicalDetails.addEntries(
|
||||
{'Blood Group': studentDetail.medicaldetails![0].bloodgroup}.entries);
|
||||
medicalDetails.addEntries(
|
||||
{'DNR': studentDetail.medicaldetails![0].dnr.toString()}.entries);
|
||||
medicalDetails.addEntries(
|
||||
{'Allergies': studentDetail.medicaldetails![0].allergies}.entries);
|
||||
medicalDetails.addEntries({
|
||||
'Medical Condition': studentDetail.medicaldetails![0].medicalcondition
|
||||
}.entries);
|
||||
medicalDetails.addEntries({
|
||||
'Emergency Contact': studentDetail.medicaldetails![0].emergencycontactname
|
||||
}.entries);
|
||||
medicalDetails.addEntries({
|
||||
'Emergency Number': studentDetail.medicaldetails![0].emergencycontactnumber
|
||||
}.entries);
|
||||
medicalDetails.addEntries({
|
||||
'Emergency Relationship': studentDetail.medicaldetails![0].emergencycontractrelationship
|
||||
}.entries);
|
||||
|
||||
return medicalDetails;
|
||||
}
|
||||
@@ -0,0 +1,265 @@
|
||||
import 'package:flutter/material.dart';
|
||||
import 'package:school_management_system/api/student_requests.dart';
|
||||
import 'package:school_management_system/components/default_values.dart';
|
||||
import 'package:school_management_system/screens/profile/components/personal_details.dart';
|
||||
import 'package:school_management_system/screens/welcome/welcome_screen.dart';
|
||||
|
||||
//This Screen Would include the basic Student Detials
|
||||
//Profile Picture, Full Name, Course of Study, Current Year, Age (DOB), Medical History (Height, Weight, et all)
|
||||
//Next of Kin, Contact Details, Address
|
||||
//Every other item as remembered would be added.
|
||||
|
||||
late Future<Student> _returnData;
|
||||
late Student apiData;
|
||||
late Future<bool> _checkToken;
|
||||
|
||||
class ProfileScreen extends StatefulWidget {
|
||||
const ProfileScreen({super.key});
|
||||
|
||||
@override
|
||||
State<ProfileScreen> createState() => _ProfileScreenState();
|
||||
}
|
||||
|
||||
class _ProfileScreenState extends State<ProfileScreen> {
|
||||
@override
|
||||
void initState() {
|
||||
_checkToken = checkTokenValidity();
|
||||
super.initState();
|
||||
_returnData = getStudentDetail(loginId);
|
||||
}
|
||||
|
||||
@override
|
||||
Widget build(BuildContext context) {
|
||||
_checkToken.then(
|
||||
(value) {
|
||||
if (!value) {
|
||||
Navigator.push(
|
||||
context,
|
||||
MaterialPageRoute(
|
||||
builder: (context) {
|
||||
return const WelcomeScreen();
|
||||
},
|
||||
),
|
||||
);
|
||||
|
||||
ScaffoldMessenger.of(context).showSnackBar(
|
||||
const SnackBar(
|
||||
content: Text('Session Time Out / Sign Back In'),
|
||||
),
|
||||
);
|
||||
}
|
||||
},
|
||||
);
|
||||
return FutureBuilder<Student>(
|
||||
future: _returnData,
|
||||
builder: (context, snapshot) {
|
||||
List<Widget> children;
|
||||
if (snapshot.hasData) {
|
||||
apiData = snapshot.data!;
|
||||
children = [
|
||||
const SizedBox(height: 20),
|
||||
profileImage(),
|
||||
const SizedBox(height: 30),
|
||||
personalDetails(),
|
||||
const SizedBox(height: 30),
|
||||
contactDetails(),
|
||||
const SizedBox(height: 30),
|
||||
medicalDetails(),
|
||||
const SizedBox(height: 30),
|
||||
];
|
||||
} else if (snapshot.hasError) {
|
||||
children = [
|
||||
const Icon(
|
||||
Icons.error_outline,
|
||||
color: Colors.red,
|
||||
size: 60,
|
||||
),
|
||||
Padding(
|
||||
padding: const EdgeInsets.only(top: 16),
|
||||
child: Text('Error: ${snapshot.error}'),
|
||||
),
|
||||
];
|
||||
} else {
|
||||
children = const [
|
||||
SizedBox(
|
||||
width: 60,
|
||||
height: 60,
|
||||
child: CircularProgressIndicator(),
|
||||
),
|
||||
Padding(
|
||||
padding: EdgeInsets.only(top: 16),
|
||||
child: Text('Loading Data...'),
|
||||
),
|
||||
];
|
||||
}
|
||||
|
||||
return Container(
|
||||
color: Colors.white,
|
||||
child: Padding(
|
||||
padding: const EdgeInsets.only(left: 20, right: 20),
|
||||
child: ListView(
|
||||
scrollDirection: Axis.vertical,
|
||||
children: children,
|
||||
),
|
||||
),
|
||||
);
|
||||
},
|
||||
);
|
||||
}
|
||||
|
||||
Column medicalDetails() {
|
||||
var medicalDetails = getMedicalDetails(apiData);
|
||||
|
||||
return Column(
|
||||
crossAxisAlignment: CrossAxisAlignment.start,
|
||||
children: [
|
||||
const Text(
|
||||
'Medical Details',
|
||||
style: TextStyle(
|
||||
color: Colors.black,
|
||||
fontSize: 18,
|
||||
fontWeight: FontWeight.w600,
|
||||
),
|
||||
),
|
||||
const SizedBox(height: 5),
|
||||
Column(
|
||||
children: [
|
||||
Table(
|
||||
columnWidths: const <int, TableColumnWidth>{
|
||||
0: IntrinsicColumnWidth(),
|
||||
1: FlexColumnWidth(),
|
||||
2: FixedColumnWidth(64)
|
||||
},
|
||||
children: [
|
||||
for (var key in medicalDetails.keys)
|
||||
TableRow(children: [
|
||||
Padding(
|
||||
padding: const EdgeInsets.only(right: 5),
|
||||
child: Text(
|
||||
key,
|
||||
style: const TextStyle(
|
||||
fontSize: 14, fontWeight: FontWeight.w500),
|
||||
),
|
||||
),
|
||||
Padding(
|
||||
padding: const EdgeInsets.only(left: 5),
|
||||
child: Text(medicalDetails[key]),
|
||||
)
|
||||
])
|
||||
],
|
||||
)
|
||||
],
|
||||
),
|
||||
],
|
||||
);
|
||||
}
|
||||
|
||||
Column contactDetails() {
|
||||
var contactDetails = getContactDetails(apiData);
|
||||
|
||||
return Column(
|
||||
crossAxisAlignment: CrossAxisAlignment.start,
|
||||
children: [
|
||||
const Text(
|
||||
'Contact Details',
|
||||
style: TextStyle(
|
||||
color: Colors.black,
|
||||
fontSize: 18,
|
||||
fontWeight: FontWeight.w600,
|
||||
),
|
||||
),
|
||||
const SizedBox(height: 5),
|
||||
Column(
|
||||
children: [
|
||||
Table(
|
||||
columnWidths: const <int, TableColumnWidth>{
|
||||
0: IntrinsicColumnWidth(),
|
||||
1: FlexColumnWidth(),
|
||||
2: FixedColumnWidth(64)
|
||||
},
|
||||
children: [
|
||||
for (var key in contactDetails.keys)
|
||||
TableRow(children: [
|
||||
Padding(
|
||||
padding: const EdgeInsets.only(right: 5),
|
||||
child: Text(
|
||||
key,
|
||||
style: const TextStyle(
|
||||
fontSize: 14, fontWeight: FontWeight.w500),
|
||||
),
|
||||
),
|
||||
Padding(
|
||||
padding: const EdgeInsets.only(left: 5),
|
||||
child: Text(
|
||||
contactDetails[key],
|
||||
),
|
||||
)
|
||||
])
|
||||
],
|
||||
)
|
||||
],
|
||||
)
|
||||
],
|
||||
);
|
||||
}
|
||||
|
||||
Column personalDetails() {
|
||||
var personalDetails = getPersonalDetails(apiData);
|
||||
|
||||
return Column(
|
||||
crossAxisAlignment: CrossAxisAlignment.start,
|
||||
children: [
|
||||
const Text(
|
||||
'Personal Details',
|
||||
style: TextStyle(
|
||||
color: Colors.black,
|
||||
fontSize: 18,
|
||||
fontWeight: FontWeight.w600,
|
||||
),
|
||||
),
|
||||
const SizedBox(height: 5),
|
||||
Column(
|
||||
children: [
|
||||
Table(
|
||||
// border: TableBorder.all(),
|
||||
columnWidths: const <int, TableColumnWidth>{
|
||||
0: IntrinsicColumnWidth(),
|
||||
1: FlexColumnWidth(),
|
||||
2: FixedColumnWidth(64)
|
||||
},
|
||||
children: [
|
||||
for (var key in personalDetails.keys)
|
||||
TableRow(children: [
|
||||
Padding(
|
||||
padding: const EdgeInsets.only(right: 5),
|
||||
child: Text(
|
||||
key,
|
||||
style: const TextStyle(
|
||||
fontSize: 14, fontWeight: FontWeight.w500),
|
||||
),
|
||||
),
|
||||
Padding(
|
||||
padding: const EdgeInsets.only(left: 5),
|
||||
child: Text(personalDetails[key]),
|
||||
)
|
||||
])
|
||||
],
|
||||
)
|
||||
],
|
||||
),
|
||||
],
|
||||
);
|
||||
}
|
||||
|
||||
Column profileImage() {
|
||||
return Column(
|
||||
children: [
|
||||
Image.asset(
|
||||
'assets/images/passport.jpg',
|
||||
width: 120,
|
||||
height: 120,
|
||||
)
|
||||
],
|
||||
);
|
||||
}
|
||||
}
|
||||
Reference in New Issue
Block a user