i figured it out
i was call GpaCalculationsCubit at launch the app and call this function at create a new constructor
~~~
void calculateGpaAndCgpa() {
double totalCredits = 0.0;
double cgpaPointsOriginal = 0.0;
double cgpaPointsChanged = 0.0;
double cgpaCredits = 0.0;
List<SemesterModel> updatedSemesters = [];
for (var semester in student.semesters) {
double gpaPoints = 0.0;
double gpaCredits = 0.0;
double earnedCredits = 0.0;
bool isRepeatedAndChangedFound = false;
for (var course in semester.courses) {
if (course.isRepeated && course.isChanged) {
isRepeatedAndChangedFound = true;
break;
}
}
if (isRepeatedAndChangedFound) {
for (var i = student.semesters.indexOf(semester); i >= 0; i--) {
for (var course in student.semesters[i].courses) {
if (course.isRepeated) {
outerloop:
for (var j = i - 1; j >= 0; j--) {
for (var oldCourse in student.semesters[j].courses) {
if (oldCourse.name.trim().toLowerCase() ==
course.name.trim().toLowerCase()) {
cgpaPointsOriginal +=
getGradePoint(course.grade) * course.credits -
getGradePoint(oldCourse.grade) * oldCourse.credits;
break outerloop;
}
}
}
}
}
}
} else {
for (var course in semester.courses) {
if (course.isRepeated) {
cgpaPointsOriginal = cgpaPointsChanged;
break;
}
}
}
for (var course in semester.courses) {
if (course.grade == '--') {
gpaCredits += course.credits;
continue;
}
gpaPoints += getGradePoint(course.grade) * course.credits;
gpaCredits += course.credits;
earnedCredits +=
course.isRepeated ||
(course.isChanged && getGradePoint(course.newGrade) == 0) ||
(!course.isChanged && getGradePoint(course.grade) == 0)
? 0.0
: course.credits;
cgpaPointsOriginal +=
course.isRepeated
? 0.0
: getGradePoint(course.grade) * course.credits;
cgpaCredits += course.isRepeated ? 0.0 : course.credits;
cgpaPointsChanged +=
course.isRepeated
? 0.0
: course.isChanged
? getGradePoint(course.newGrade) * course.credits
: getGradePoint(course.grade) * course.credits;
}
totalCredits += earnedCredits;
double gpa = gpaCredits > 0 ? gpaPoints / gpaCredits : 0.0;
double cgpaOriginal =
cgpaCredits > 0 ? cgpaPointsOriginal / cgpaCredits : 0.0;
double cgpaChanged =
cgpaCredits > 0 ? cgpaPointsChanged / cgpaCredits : 0.0;
updatedSemesters.add(
SemesterModel(
name: semester.name,
courses: semester.courses,
gpa: gpa,
selected: semester.selected,
cgpaOriginal: cgpaOriginal,
cgpaChanged: cgpaChanged,
attemptedCredits: gpaCredits,
earnedCredits: earnedCredits,
note: semester.note,
),
);
}
final updatedStudent = StudentModel(
cgpa:
updatedSemesters.isNotEmpty ? updatedSemesters.last.cgpaChanged : 0.0,
totalCredits: totalCredits.toInt(),
semesters: updatedSemesters,
);
box.put('default', updatedStudent);
emit(
state.copyWith(
cgpa: updatedStudent.cgpa,
totalCredits: totalCredits.toInt(),
semesters: updatedSemesters,
),
);
}
~~~
the error was here :
~~~
updatedSemesters.add(
SemesterModel(
name: semester.name,
courses: semester.courses,
gpa: gpa,
selected: semester.selected,
cgpaOriginal: cgpaOriginal,
cgpaChanged: cgpaChanged,
attemptedCredits: gpaCredits,
earnedCredits: earnedCredits,
//i was not add the note attribute here
note: semester.note,
),
);
}
~~~
but i need to understand why in second restart not at first one ?