import 'package:flutter/material.dart'; import 'package:school_management_system/api/results_requests.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/welcome/welcome_screen.dart'; late Future _checkToken; late Future _returnData; late Map>? sessiondetails; late Student apiData; Future? _returnresult; late List studentScores; class ResultsScreen extends StatefulWidget { const ResultsScreen({super.key}); @override State createState() => _ResultsScreenState(); } class _ResultsScreenState extends State { String? _selectedKey; String? _selectedItem; Result? resultList; @override void initState() { _checkToken = checkTokenValidity(); super.initState(); _returnData = getStudentDetail(loginId); resultList = null; } @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( future: _returnData, builder: (context, snapshot) { List children; if (snapshot.hasData) { apiData = snapshot.data!; sessiondetails = apiData.sessiondetails!; children = [ const SizedBox(height: 20), dropDownMenu(), const SizedBox(height: 50), dataTableMenu() ]; } 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, ), ), ); }, ); } Row dropDownMenu() { return Row( children: [ DropdownButton( value: _selectedKey, icon: const Icon(Icons.arrow_drop_down), iconSize: 30, elevation: 16, style: const TextStyle(fontSize: 20, color: Colors.black), underline: Container( height: 2, color: Colors.grey, ), onChanged: (newValue) { setState(() { _selectedKey = newValue; _selectedItem = null; }); }, items: sessiondetails?.keys.map((String value) { return DropdownMenuItem( value: value, child: Text(value), ); }).toList(), ), const SizedBox(width: 30), _selectedKey != null ? DropdownButton( value: _selectedItem, icon: const Icon(Icons.arrow_drop_down), iconSize: 30, elevation: 16, style: const TextStyle(fontSize: 20, color: Colors.black), underline: Container( height: 2, color: Colors.grey, ), onChanged: (newValue) { setState(() { _selectedItem = newValue; }); }, items: sessiondetails![_selectedKey]!.map((String value) { return DropdownMenuItem( value: value, child: Text(value), onTap: () { setState(() { _returnresult = getStudentResult(_selectedKey!, value); // resultList = null; }); }, ); }).toList(), ) : Container() ], ); } FutureBuilder dataTableMenu() { resultList = null; return FutureBuilder( future: _returnresult, builder: (context, snapshot) { if (snapshot.hasData) { resultList = snapshot.data!; studentScores = resultList!.scores!; } else if (snapshot.hasError) { resultList = snapshot.data; } else { resultList = null; } return SingleChildScrollView( scrollDirection: Axis.vertical, child: resultList != null ? Column( children: [ DataTable( columns: const [ //DataColumn(label: Text('Module Code')), DataColumn(label: Text('Module Title')), DataColumn(label: Text('Score'), numeric: true), DataColumn(label: Text('Grade')), ], rows: resultList!.scores!.map((value) { return DataRow(cells: [ // DataCell(Text(value.module!)), DataCell(Text(value.module!)), DataCell(Text(value.score!.toString())), DataCell(Text(studentGrade(value.score!))), ]); }).toList()), ], ) : const Center( child: Text( 'Nothing to Display', style: TextStyle(fontWeight: FontWeight.w800), ), ), ); }, ); } }