forked from firka/student-legacy
almost finished new subjects page
This commit is contained in:
parent
e62fd40f88
commit
6297b9cc24
@ -23,12 +23,12 @@ class AverageDisplay extends StatelessWidget {
|
|||||||
return Container(
|
return Container(
|
||||||
width: border ? 57.0 : 54.0,
|
width: border ? 57.0 : 54.0,
|
||||||
padding: EdgeInsets.symmetric(
|
padding: EdgeInsets.symmetric(
|
||||||
horizontal: 8.0 - (border ? 2 : 0), vertical: 6.0 - (border ? 2 : 0)),
|
horizontal: 6.0 - (border ? 2 : 0), vertical: 5.0 - (border ? 2 : 0)),
|
||||||
decoration: BoxDecoration(
|
decoration: BoxDecoration(
|
||||||
borderRadius: BorderRadius.circular(45.0),
|
borderRadius: BorderRadius.circular(45.0),
|
||||||
border: border
|
border: border
|
||||||
? Border.fromBorderSide(
|
? Border.fromBorderSide(
|
||||||
BorderSide(color: color.withOpacity(.5), width: 3.0))
|
BorderSide(color: color.withOpacity(.5), width: 1.0))
|
||||||
: null,
|
: null,
|
||||||
color: !border ? color.withOpacity(average == 0.0 ? .15 : .25) : null,
|
color: !border ? color.withOpacity(average == 0.0 ? .15 : .25) : null,
|
||||||
),
|
),
|
||||||
@ -36,7 +36,7 @@ class AverageDisplay extends StatelessWidget {
|
|||||||
average == 0.0 ? "-" : averageText,
|
average == 0.0 ? "-" : averageText,
|
||||||
textAlign: TextAlign.center,
|
textAlign: TextAlign.center,
|
||||||
style: TextStyle(
|
style: TextStyle(
|
||||||
color: color, fontWeight: FontWeight.w600, fontSize: 14.0),
|
color: color, fontWeight: FontWeight.w600, fontSize: 15.0),
|
||||||
maxLines: 1,
|
maxLines: 1,
|
||||||
),
|
),
|
||||||
);
|
);
|
||||||
|
@ -4,6 +4,7 @@ import 'package:filcnaplo/theme/colors/colors.dart';
|
|||||||
import 'package:filcnaplo/utils/format.dart';
|
import 'package:filcnaplo/utils/format.dart';
|
||||||
import 'package:filcnaplo_kreta_api/models/subject.dart';
|
import 'package:filcnaplo_kreta_api/models/subject.dart';
|
||||||
import 'package:filcnaplo_mobile_ui/common/average_display.dart';
|
import 'package:filcnaplo_mobile_ui/common/average_display.dart';
|
||||||
|
import 'package:filcnaplo_mobile_ui/common/round_border_icon.dart';
|
||||||
import 'package:flutter/material.dart';
|
import 'package:flutter/material.dart';
|
||||||
import 'package:provider/provider.dart';
|
import 'package:provider/provider.dart';
|
||||||
|
|
||||||
@ -44,9 +45,18 @@ class GradeSubjectTile extends StatelessWidget {
|
|||||||
shape: RoundedRectangleBorder(borderRadius: BorderRadius.circular(8.0)),
|
shape: RoundedRectangleBorder(borderRadius: BorderRadius.circular(8.0)),
|
||||||
visualDensity: VisualDensity.compact,
|
visualDensity: VisualDensity.compact,
|
||||||
onTap: onTap,
|
onTap: onTap,
|
||||||
leading: Icon(
|
leading: RoundBorderIcon(
|
||||||
SubjectIcon.resolveVariant(subject: subject, context: context),
|
icon: Icon(
|
||||||
color: textColor.withOpacity(.75)),
|
SubjectIcon.resolveVariant(
|
||||||
|
context: context,
|
||||||
|
subject: subject,
|
||||||
|
),
|
||||||
|
size: 22.0,
|
||||||
|
weight: 2.5,
|
||||||
|
),
|
||||||
|
padding: 5.0,
|
||||||
|
width: 1.0,
|
||||||
|
),
|
||||||
title: Text(
|
title: Text(
|
||||||
subject.renamedTo ?? subject.name.capital(),
|
subject.renamedTo ?? subject.name.capital(),
|
||||||
maxLines: 2,
|
maxLines: 2,
|
||||||
|
@ -3,8 +3,11 @@
|
|||||||
import 'dart:math';
|
import 'dart:math';
|
||||||
|
|
||||||
import 'package:auto_size_text/auto_size_text.dart';
|
import 'package:auto_size_text/auto_size_text.dart';
|
||||||
|
import 'package:collection/collection.dart';
|
||||||
import 'package:filcnaplo/api/providers/update_provider.dart';
|
import 'package:filcnaplo/api/providers/update_provider.dart';
|
||||||
import 'package:filcnaplo/ui/widgets/grade/grade_tile.dart';
|
import 'package:filcnaplo/ui/widgets/grade/grade_tile.dart';
|
||||||
|
import 'package:filcnaplo_kreta_api/models/exam.dart';
|
||||||
|
import 'package:filcnaplo_kreta_api/providers/exam_provider.dart';
|
||||||
// import 'package:filcnaplo_kreta_api/client/api.dart';
|
// import 'package:filcnaplo_kreta_api/client/api.dart';
|
||||||
// import 'package:filcnaplo_kreta_api/client/client.dart';
|
// import 'package:filcnaplo_kreta_api/client/client.dart';
|
||||||
import 'package:filcnaplo_kreta_api/providers/grade_provider.dart';
|
import 'package:filcnaplo_kreta_api/providers/grade_provider.dart';
|
||||||
@ -13,12 +16,14 @@ import 'package:filcnaplo/theme/colors/colors.dart';
|
|||||||
import 'package:filcnaplo_kreta_api/models/grade.dart';
|
import 'package:filcnaplo_kreta_api/models/grade.dart';
|
||||||
import 'package:filcnaplo_kreta_api/models/subject.dart';
|
import 'package:filcnaplo_kreta_api/models/subject.dart';
|
||||||
import 'package:filcnaplo_kreta_api/models/group_average.dart';
|
import 'package:filcnaplo_kreta_api/models/group_average.dart';
|
||||||
|
import 'package:filcnaplo_kreta_api/providers/homework_provider.dart';
|
||||||
import 'package:filcnaplo_mobile_ui/common/average_display.dart';
|
import 'package:filcnaplo_mobile_ui/common/average_display.dart';
|
||||||
import 'package:filcnaplo_mobile_ui/common/bottom_sheet_menu/rounded_bottom_sheet.dart';
|
import 'package:filcnaplo_mobile_ui/common/bottom_sheet_menu/rounded_bottom_sheet.dart';
|
||||||
import 'package:filcnaplo_mobile_ui/common/empty.dart';
|
import 'package:filcnaplo_mobile_ui/common/empty.dart';
|
||||||
import 'package:filcnaplo_mobile_ui/common/panel/panel.dart';
|
import 'package:filcnaplo_mobile_ui/common/panel/panel.dart';
|
||||||
import 'package:filcnaplo_mobile_ui/common/profile_image/profile_button.dart';
|
import 'package:filcnaplo_mobile_ui/common/profile_image/profile_button.dart';
|
||||||
import 'package:filcnaplo_mobile_ui/common/profile_image/profile_image.dart';
|
import 'package:filcnaplo_mobile_ui/common/profile_image/profile_image.dart';
|
||||||
|
import 'package:filcnaplo_mobile_ui/common/widgets/exam/exam_viewable.dart';
|
||||||
import 'package:filcnaplo_mobile_ui/common/widgets/statistics_tile.dart';
|
import 'package:filcnaplo_mobile_ui/common/widgets/statistics_tile.dart';
|
||||||
import 'package:filcnaplo_mobile_ui/common/widgets/grade/grade_subject_tile.dart';
|
import 'package:filcnaplo_mobile_ui/common/widgets/grade/grade_subject_tile.dart';
|
||||||
import 'package:filcnaplo_mobile_ui/common/trend_display.dart';
|
import 'package:filcnaplo_mobile_ui/common/trend_display.dart';
|
||||||
@ -53,6 +58,9 @@ class GradesPageState extends State<GradesPage> {
|
|||||||
late GradeProvider gradeProvider;
|
late GradeProvider gradeProvider;
|
||||||
late UpdateProvider updateProvider;
|
late UpdateProvider updateProvider;
|
||||||
late GradeCalculatorProvider calculatorProvider;
|
late GradeCalculatorProvider calculatorProvider;
|
||||||
|
late HomeworkProvider homeworkProvider;
|
||||||
|
late ExamProvider examProvider;
|
||||||
|
|
||||||
late String firstName;
|
late String firstName;
|
||||||
late Widget yearlyGraph;
|
late Widget yearlyGraph;
|
||||||
late Widget gradesCount;
|
late Widget gradesCount;
|
||||||
@ -92,6 +100,8 @@ class GradesPageState extends State<GradesPage> {
|
|||||||
Map<GradeSubject, double> subjectAvgs = {};
|
Map<GradeSubject, double> subjectAvgs = {};
|
||||||
|
|
||||||
if (!gradeCalcMode) {
|
if (!gradeCalcMode) {
|
||||||
|
var i = 0;
|
||||||
|
|
||||||
tiles.addAll(subjects.map((subject) {
|
tiles.addAll(subjects.map((subject) {
|
||||||
List<Grade> subjectGrades = getSubjectGrades(subject);
|
List<Grade> subjectGrades = getSubjectGrades(subject);
|
||||||
|
|
||||||
@ -112,7 +122,40 @@ class GradesPageState extends State<GradesPage> {
|
|||||||
|
|
||||||
if (avg != 0) subjectAvgs[subject] = avg;
|
if (avg != 0) subjectAvgs[subject] = avg;
|
||||||
|
|
||||||
return GradeSubjectTile(
|
i++;
|
||||||
|
|
||||||
|
int homeworkCount = homeworkProvider.homework
|
||||||
|
.where((e) => e.subject.id == subject.id)
|
||||||
|
.length;
|
||||||
|
bool hasHomework = homeworkCount > 0;
|
||||||
|
|
||||||
|
Exam? nearestExam = examProvider.exams
|
||||||
|
.firstWhereOrNull((e) => e.subject.id == subject.id);
|
||||||
|
|
||||||
|
bool hasUnder = hasHomework || nearestExam != null;
|
||||||
|
|
||||||
|
return Padding(
|
||||||
|
padding: i > 1 ? const EdgeInsets.only(top: 9.0) : EdgeInsets.zero,
|
||||||
|
child: Column(
|
||||||
|
children: [
|
||||||
|
Container(
|
||||||
|
decoration: BoxDecoration(
|
||||||
|
borderRadius: BorderRadius.only(
|
||||||
|
topLeft: const Radius.circular(16.0),
|
||||||
|
topRight: const Radius.circular(16.0),
|
||||||
|
bottomLeft: hasUnder
|
||||||
|
? const Radius.circular(8.0)
|
||||||
|
: const Radius.circular(16.0),
|
||||||
|
bottomRight: hasUnder
|
||||||
|
? const Radius.circular(8.0)
|
||||||
|
: const Radius.circular(16.0),
|
||||||
|
),
|
||||||
|
color: Theme.of(context).colorScheme.background,
|
||||||
|
),
|
||||||
|
child: Padding(
|
||||||
|
padding: const EdgeInsets.symmetric(
|
||||||
|
vertical: 8.0, horizontal: 6.0),
|
||||||
|
child: GradeSubjectTile(
|
||||||
subject,
|
subject,
|
||||||
averageBefore: averageBefore,
|
averageBefore: averageBefore,
|
||||||
average: avg,
|
average: avg,
|
||||||
@ -121,6 +164,63 @@ class GradesPageState extends State<GradesPage> {
|
|||||||
GradeSubjectView(subject, groupAverage: groupAverage)
|
GradeSubjectView(subject, groupAverage: groupAverage)
|
||||||
.push(context, root: true);
|
.push(context, root: true);
|
||||||
},
|
},
|
||||||
|
),
|
||||||
|
),
|
||||||
|
),
|
||||||
|
if (hasUnder)
|
||||||
|
const SizedBox(
|
||||||
|
height: 6.0,
|
||||||
|
),
|
||||||
|
if (hasHomework)
|
||||||
|
Container(
|
||||||
|
decoration: BoxDecoration(
|
||||||
|
borderRadius: BorderRadius.only(
|
||||||
|
topLeft: const Radius.circular(8.0),
|
||||||
|
topRight: const Radius.circular(8.0),
|
||||||
|
bottomLeft: nearestExam != null
|
||||||
|
? const Radius.circular(8.0)
|
||||||
|
: const Radius.circular(16.0),
|
||||||
|
bottomRight: nearestExam != null
|
||||||
|
? const Radius.circular(8.0)
|
||||||
|
: const Radius.circular(16.0),
|
||||||
|
),
|
||||||
|
color: Theme.of(context).colorScheme.background,
|
||||||
|
),
|
||||||
|
child: Padding(
|
||||||
|
padding: const EdgeInsets.only(
|
||||||
|
top: 8.0,
|
||||||
|
bottom: 8.0,
|
||||||
|
left: 15.0,
|
||||||
|
right: 8.0,
|
||||||
|
),
|
||||||
|
child: Row(
|
||||||
|
mainAxisAlignment: MainAxisAlignment.spaceBetween,
|
||||||
|
children: [
|
||||||
|
Text('you_have_hw'.i18n.fill([homeworkCount])),
|
||||||
|
// const Icon(
|
||||||
|
// FeatherIcons.chevronRight,
|
||||||
|
// grade: 0.5,
|
||||||
|
// size: 20.0,
|
||||||
|
// )
|
||||||
|
],
|
||||||
|
),
|
||||||
|
),
|
||||||
|
),
|
||||||
|
if (nearestExam != null)
|
||||||
|
Container(
|
||||||
|
decoration: BoxDecoration(
|
||||||
|
borderRadius: const BorderRadius.only(
|
||||||
|
topLeft: Radius.circular(8.0),
|
||||||
|
topRight: Radius.circular(8.0),
|
||||||
|
bottomLeft: Radius.circular(16.0),
|
||||||
|
bottomRight: Radius.circular(16.0),
|
||||||
|
),
|
||||||
|
color: Theme.of(context).colorScheme.background,
|
||||||
|
),
|
||||||
|
child: ExamViewable(nearestExam),
|
||||||
|
),
|
||||||
|
],
|
||||||
|
),
|
||||||
);
|
);
|
||||||
}));
|
}));
|
||||||
} else {
|
} else {
|
||||||
@ -165,8 +265,8 @@ class GradesPageState extends State<GradesPage> {
|
|||||||
)),
|
)),
|
||||||
);
|
);
|
||||||
|
|
||||||
tiles.insert(4, const PanelHeader(padding: EdgeInsets.only(top: 12.0)));
|
// tiles.insert(4, const PanelHeader(padding: EdgeInsets.only(top: 12.0)));
|
||||||
tiles.add(const PanelFooter(padding: EdgeInsets.only(bottom: 12.0)));
|
// tiles.add(const PanelFooter(padding: EdgeInsets.only(bottom: 12.0)));
|
||||||
}
|
}
|
||||||
tiles.add(Padding(
|
tiles.add(Padding(
|
||||||
padding: EdgeInsets.only(bottom: !gradeCalcMode ? 24.0 : 250.0),
|
padding: EdgeInsets.only(bottom: !gradeCalcMode ? 24.0 : 250.0),
|
||||||
@ -193,6 +293,9 @@ class GradesPageState extends State<GradesPage> {
|
|||||||
: 0.0;
|
: 0.0;
|
||||||
|
|
||||||
if (subjectAvg > 0 && !gradeCalcMode) {
|
if (subjectAvg > 0 && !gradeCalcMode) {
|
||||||
|
tiles.add(
|
||||||
|
PanelTitle(title: Text("data".i18n)),
|
||||||
|
);
|
||||||
tiles.add(Row(
|
tiles.add(Row(
|
||||||
crossAxisAlignment: CrossAxisAlignment.start,
|
crossAxisAlignment: CrossAxisAlignment.start,
|
||||||
children: [
|
children: [
|
||||||
@ -248,6 +351,9 @@ class GradesPageState extends State<GradesPage> {
|
|||||||
gradeProvider = Provider.of<GradeProvider>(context);
|
gradeProvider = Provider.of<GradeProvider>(context);
|
||||||
updateProvider = Provider.of<UpdateProvider>(context);
|
updateProvider = Provider.of<UpdateProvider>(context);
|
||||||
calculatorProvider = Provider.of<GradeCalculatorProvider>(context);
|
calculatorProvider = Provider.of<GradeCalculatorProvider>(context);
|
||||||
|
homeworkProvider = Provider.of<HomeworkProvider>(context);
|
||||||
|
examProvider = Provider.of<ExamProvider>(context);
|
||||||
|
|
||||||
context.watch<PremiumProvider>();
|
context.watch<PremiumProvider>();
|
||||||
|
|
||||||
List<String> nameParts = user.displayName?.split(" ") ?? ["?"];
|
List<String> nameParts = user.displayName?.split(" ") ?? ["?"];
|
||||||
|
@ -4,9 +4,9 @@ extension Localization on String {
|
|||||||
static final _t = Translations.byLocale("hu_hu") +
|
static final _t = Translations.byLocale("hu_hu") +
|
||||||
{
|
{
|
||||||
"en_en": {
|
"en_en": {
|
||||||
"Grades": "Grades",
|
"Grades": "Subjects",
|
||||||
"Ghost Grades": "Grades",
|
"Ghost Grades": "Grades",
|
||||||
"Subjects": "Subjects",
|
"Subjects": "Your Subjects",
|
||||||
"Subjects_changes": "Subject Differences",
|
"Subjects_changes": "Subject Differences",
|
||||||
"empty": "You don't have any subjects.",
|
"empty": "You don't have any subjects.",
|
||||||
"annual_average": "Annual average",
|
"annual_average": "Annual average",
|
||||||
@ -18,11 +18,13 @@ extension Localization on String {
|
|||||||
"classavg": "Class Average",
|
"classavg": "Class Average",
|
||||||
"fail_warning": "Failure warning",
|
"fail_warning": "Failure warning",
|
||||||
"fail_warning_description": "You are failing %d subject(s)",
|
"fail_warning_description": "You are failing %d subject(s)",
|
||||||
|
"data": "Data",
|
||||||
|
"you_have_hw": "You have %s homework(s) to do",
|
||||||
},
|
},
|
||||||
"hu_hu": {
|
"hu_hu": {
|
||||||
"Grades": "Jegyek",
|
"Grades": "Tantárgyak",
|
||||||
"Ghost Grades": "Szellem jegyek",
|
"Ghost Grades": "Szellem jegyek",
|
||||||
"Subjects": "Tantárgyak",
|
"Subjects": "Tantárgyaid",
|
||||||
"Subjects_changes": "Tantárgyi változások",
|
"Subjects_changes": "Tantárgyi változások",
|
||||||
"empty": "Még nincs egy tárgyad sem.",
|
"empty": "Még nincs egy tárgyad sem.",
|
||||||
"annual_average": "Éves átlag",
|
"annual_average": "Éves átlag",
|
||||||
@ -34,11 +36,13 @@ extension Localization on String {
|
|||||||
"classavg": "Osztályátlag",
|
"classavg": "Osztályátlag",
|
||||||
"fail_warning": "Bukás figyelmeztető",
|
"fail_warning": "Bukás figyelmeztető",
|
||||||
"fail_warning_description": "Bukásra állsz %d tantárgyból",
|
"fail_warning_description": "Bukásra állsz %d tantárgyból",
|
||||||
|
"data": "Adatok",
|
||||||
|
"you_have_hw": "%s házi feladat vár rád",
|
||||||
},
|
},
|
||||||
"de_de": {
|
"de_de": {
|
||||||
"Grades": "Noten",
|
"Grades": "Fächer",
|
||||||
"Ghost Grades": "Geist Noten",
|
"Ghost Grades": "Geist Noten",
|
||||||
"Subjects": "Fächer",
|
"Subjects": "Ihre Themen",
|
||||||
"Subjects_changes": "Betreff Änderungen",
|
"Subjects_changes": "Betreff Änderungen",
|
||||||
"empty": "Sie haben keine Fächer.",
|
"empty": "Sie haben keine Fächer.",
|
||||||
"annual_average": "Jahresdurchschnitt",
|
"annual_average": "Jahresdurchschnitt",
|
||||||
@ -50,6 +54,8 @@ extension Localization on String {
|
|||||||
"classavg": "Klassendurchschnitt",
|
"classavg": "Klassendurchschnitt",
|
||||||
"fail_warning": "Ausfallwarnung",
|
"fail_warning": "Ausfallwarnung",
|
||||||
"fail_warning_description": "Sie werden in %d des Fachs durchfallen",
|
"fail_warning_description": "Sie werden in %d des Fachs durchfallen",
|
||||||
|
"data": "Daten",
|
||||||
|
"you_have_hw": "Du hast %s Hausaufgaben",
|
||||||
},
|
},
|
||||||
};
|
};
|
||||||
|
|
||||||
|
Loading…
x
Reference in New Issue
Block a user