fully finished total grade calculator
This commit is contained in:
@@ -2,6 +2,7 @@ import 'dart:math';
|
||||
|
||||
import 'package:auto_size_text/auto_size_text.dart';
|
||||
import 'package:filcnaplo/api/providers/update_provider.dart';
|
||||
import 'package:filcnaplo/ui/widgets/grade/grade_tile.dart';
|
||||
// import 'package:filcnaplo_kreta_api/client/api.dart';
|
||||
// import 'package:filcnaplo_kreta_api/client/client.dart';
|
||||
import 'package:filcnaplo_kreta_api/providers/grade_provider.dart';
|
||||
@@ -88,50 +89,86 @@ class _GradesPageState extends State<GradesPage> {
|
||||
|
||||
Map<GradeSubject, double> subjectAvgs = {};
|
||||
|
||||
tiles.addAll(subjects.map((subject) {
|
||||
List<Grade> subjectGrades = getSubjectGrades(subject);
|
||||
if (!gradeCalcMode) {
|
||||
tiles.addAll(subjects.map((subject) {
|
||||
List<Grade> subjectGrades = getSubjectGrades(subject);
|
||||
|
||||
double avg = AverageHelper.averageEvals(subjectGrades);
|
||||
double averageBefore = 0.0;
|
||||
double avg = AverageHelper.averageEvals(subjectGrades);
|
||||
double averageBefore = 0.0;
|
||||
|
||||
if (avgDropValue != 0) {
|
||||
List<Grade> gradesBefore =
|
||||
getSubjectGrades(subject, days: avgDropValue);
|
||||
averageBefore =
|
||||
avgDropValue == 0 ? 0.0 : AverageHelper.averageEvals(gradesBefore);
|
||||
if (avgDropValue != 0) {
|
||||
List<Grade> gradesBefore =
|
||||
getSubjectGrades(subject, days: avgDropValue);
|
||||
averageBefore = avgDropValue == 0
|
||||
? 0.0
|
||||
: AverageHelper.averageEvals(gradesBefore);
|
||||
}
|
||||
var nullavg = GroupAverage(average: 0.0, subject: subject, uid: "0");
|
||||
double groupAverage = gradeProvider.groupAverages
|
||||
.firstWhere((e) => e.subject == subject, orElse: () => nullavg)
|
||||
.average;
|
||||
|
||||
if (avg != 0) subjectAvgs[subject] = avg;
|
||||
|
||||
return GradeSubjectTile(
|
||||
subject,
|
||||
averageBefore: averageBefore,
|
||||
average: avg,
|
||||
groupAverage: avgDropValue == 0 ? groupAverage : 0.0,
|
||||
onTap: () {
|
||||
GradeSubjectView(subject, groupAverage: groupAverage)
|
||||
.push(context, root: true);
|
||||
},
|
||||
);
|
||||
}));
|
||||
} else {
|
||||
tiles.clear();
|
||||
|
||||
List<Grade> ghostGrades = calculatorProvider.ghosts;
|
||||
ghostGrades.sort((a, b) => -a.date.compareTo(b.date));
|
||||
|
||||
List<GradeTile> _gradeTiles = [];
|
||||
for (Grade grade in ghostGrades) {
|
||||
_gradeTiles.add(GradeTile(
|
||||
grade,
|
||||
viewOverride: true,
|
||||
));
|
||||
}
|
||||
var nullavg = GroupAverage(average: 0.0, subject: subject, uid: "0");
|
||||
double groupAverage = gradeProvider.groupAverages
|
||||
.firstWhere((e) => e.subject == subject, orElse: () => nullavg)
|
||||
.average;
|
||||
|
||||
if (avg != 0) subjectAvgs[subject] = avg;
|
||||
|
||||
return GradeSubjectTile(
|
||||
subject,
|
||||
averageBefore: averageBefore,
|
||||
average: avg,
|
||||
groupAverage: avgDropValue == 0 ? groupAverage : 0.0,
|
||||
onTap: () {
|
||||
GradeSubjectView(subject, groupAverage: groupAverage)
|
||||
.push(context, root: true);
|
||||
},
|
||||
tiles.add(
|
||||
_gradeTiles.isNotEmpty
|
||||
? Panel(
|
||||
key: ValueKey(gradeCalcMode),
|
||||
title: Text(
|
||||
"Ghost Grades".i18n,
|
||||
),
|
||||
child: Column(
|
||||
children: _gradeTiles,
|
||||
),
|
||||
)
|
||||
: const SizedBox(),
|
||||
);
|
||||
}));
|
||||
}
|
||||
|
||||
if (tiles.isNotEmpty) {
|
||||
if (tiles.isNotEmpty || gradeCalcMode) {
|
||||
tiles.insert(0, yearlyGraph);
|
||||
tiles.insert(1, gradesCount);
|
||||
tiles.insert(2, FailWarning(subjectAvgs: subjectAvgs));
|
||||
tiles.insert(
|
||||
if (!gradeCalcMode) {
|
||||
tiles.insert(2, FailWarning(subjectAvgs: subjectAvgs));
|
||||
tiles.insert(
|
||||
3,
|
||||
PanelTitle(
|
||||
title: Text(avgDropValue == 0
|
||||
? "Subjects".i18n
|
||||
: "Subjects_changes".i18n)));
|
||||
tiles.insert(4, const PanelHeader(padding: EdgeInsets.only(top: 12.0)));
|
||||
tiles.add(const PanelFooter(padding: EdgeInsets.only(bottom: 12.0)));
|
||||
tiles.add(const Padding(padding: EdgeInsets.only(bottom: 24.0)));
|
||||
title: Text(
|
||||
avgDropValue == 0 ? "Subjects".i18n : "Subjects_changes".i18n,
|
||||
)),
|
||||
);
|
||||
|
||||
tiles.insert(4, const PanelHeader(padding: EdgeInsets.only(top: 12.0)));
|
||||
tiles.add(const PanelFooter(padding: EdgeInsets.only(bottom: 12.0)));
|
||||
}
|
||||
tiles.add(Padding(
|
||||
padding: EdgeInsets.only(bottom: !gradeCalcMode ? 24.0 : 250.0),
|
||||
));
|
||||
} else {
|
||||
tiles.insert(
|
||||
0,
|
||||
@@ -165,7 +202,7 @@ class _GradesPageState extends State<GradesPage> {
|
||||
gradeProvider.groupAverages.length
|
||||
: 0.0;
|
||||
|
||||
if (subjectAvg > 0) {
|
||||
if (subjectAvg > 0 && !gradeCalcMode) {
|
||||
tiles.add(Row(
|
||||
crossAxisAlignment: CrossAxisAlignment.start,
|
||||
children: [
|
||||
@@ -243,7 +280,7 @@ class _GradesPageState extends State<GradesPage> {
|
||||
? gradeProvider.grades
|
||||
.where((e) => e.type == GradeType.midYear)
|
||||
.toList()
|
||||
: calculatorProvider.grades.toList());
|
||||
: calculatorProvider.grades);
|
||||
|
||||
final prevStudentAvg = AverageHelper.averageEvals(gradeProvider.grades
|
||||
.where((e) => e.type == GradeType.midYear)
|
||||
@@ -323,21 +360,22 @@ class _GradesPageState extends State<GradesPage> {
|
||||
snap: false,
|
||||
surfaceTintColor: Theme.of(context).scaffoldBackgroundColor,
|
||||
actions: [
|
||||
Padding(
|
||||
padding: const EdgeInsets.symmetric(
|
||||
horizontal: 5.0, vertical: 0.0),
|
||||
child: IconButton(
|
||||
splashRadius: 24.0,
|
||||
onPressed: () {
|
||||
// SoonAlert.show(context: context);
|
||||
gradeCalcTotal(context);
|
||||
},
|
||||
icon: Icon(
|
||||
FeatherIcons.plus,
|
||||
color: AppColors.of(context).text,
|
||||
if (!gradeCalcMode)
|
||||
Padding(
|
||||
padding: const EdgeInsets.symmetric(
|
||||
horizontal: 5.0, vertical: 0.0),
|
||||
child: IconButton(
|
||||
splashRadius: 24.0,
|
||||
onPressed: () {
|
||||
// SoonAlert.show(context: context);
|
||||
gradeCalcTotal(context);
|
||||
},
|
||||
icon: Icon(
|
||||
FeatherIcons.plus,
|
||||
color: AppColors.of(context).text,
|
||||
),
|
||||
),
|
||||
),
|
||||
),
|
||||
|
||||
// profile Icon
|
||||
Padding(
|
||||
|
||||
Reference in New Issue
Block a user