This commit is contained in:
Kima
2024-02-01 23:46:36 +01:00
parent 6e23397905
commit a435f56f2e
3 changed files with 444 additions and 25 deletions

View File

@@ -5,7 +5,7 @@ import 'package:filcnaplo/helpers/subject.dart';
import 'package:filcnaplo/models/settings.dart';
import 'package:filcnaplo/theme/colors/colors.dart';
import 'package:filcnaplo/utils/format.dart';
import 'package:filcnaplo_kreta_api/models/subject.dart';
import 'package:filcnaplo_kreta_api/models/grade.dart';
import 'package:filcnaplo_kreta_api/providers/absence_provider.dart';
import 'package:filcnaplo_kreta_api/providers/grade_provider.dart';
import 'package:filcnaplo_kreta_api/providers/timetable_provider.dart';
@@ -65,8 +65,8 @@ class PersonalizeSettingsScreenState extends State<PersonalizeSettingsScreen>
late AnimationController _hideContainersController;
late List<GradeSubject> editedSubjects;
late List<GradeSubject> otherSubjects;
late List<Grade> editedShit;
late List<Grade> otherShit;
late List<Widget> tiles;
@@ -74,21 +74,49 @@ class PersonalizeSettingsScreenState extends State<PersonalizeSettingsScreen>
void initState() {
super.initState();
editedSubjects = Provider.of<GradeProvider>(context, listen: false)
editedShit = Provider.of<GradeProvider>(context, listen: false)
.grades
.where((e) => e.teacher.isRenamed || e.subject.isRenamed)
.map((e) => e.subject)
// .map((e) => e.subject)
.toSet()
.toList()
..sort((a, b) => a.name.compareTo(b.name));
..sort((a, b) => a.subject.name.compareTo(b.subject.name));
otherSubjects = Provider.of<GradeProvider>(context, listen: false)
List<Grade> other = Provider.of<GradeProvider>(context, listen: false)
.grades
.where((e) => !e.teacher.isRenamed && !e.subject.isRenamed)
.map((e) => e.subject)
.toSet()
.toList()
..sort((a, b) => a.name.compareTo(b.name));
..sort((a, b) => a.subject.name.compareTo(b.subject.name));
otherShit = [];
var addedOthers = [];
for (var e in other) {
if (addedOthers.contains(e.subject.id)) continue;
addedOthers.add(e.subject.id);
otherShit.add(e);
}
otherShit = otherShit
..sort((a, b) =>
a.subject.name.compareTo(b.subject.name)); // just cuz why not
// editedTeachers = Provider.of<GradeProvider>(context, listen: false)
// .grades
// .where((e) => e.teacher.isRenamed || e.subject.isRenamed)
// .map((e) => e.teacher)
// .toSet()
// .toList();
// // ..sort((a, b) => a.name.compareTo(b.name));
// otherTeachers = Provider.of<GradeProvider>(context, listen: false)
// .grades
// .where((e) => !e.teacher.isRenamed && !e.subject.isRenamed)
// .map((e) => e.teacher)
// .toSet()
// .toList();
// ..sort((a, b) => a.name.compareTo(b.name));
_hideContainersController = AnimationController(
vsync: this, duration: const Duration(milliseconds: 200));
@@ -97,19 +125,25 @@ class PersonalizeSettingsScreenState extends State<PersonalizeSettingsScreen>
void buildSubjectTiles() {
List<Widget> subjectTiles = [];
var added = [];
var i = 0;
for (var s in editedSubjects) {
for (var s in editedShit) {
if (added.contains(s.subject.id)) continue;
Widget widget = PanelButton(
onPressed: () => Navigator.of(context, rootNavigator: true).push(
CupertinoPageRoute(
builder: (context) => EditSubjectScreen(subject: s),
builder: (context) => EditSubjectScreen(
subject: s.subject,
teacher: s.teacher, // not sure why, but it works tho
),
),
),
title: Text(
(s.isRenamed && settingsProvider.renamedSubjectsEnabled
? s.renamedTo
: s.name.capital()) ??
(s.subject.isRenamed && settingsProvider.renamedSubjectsEnabled
? s.subject.renamedTo
: s.subject.name.capital()) ??
'',
style: TextStyle(
color: AppColors.of(context).text.withOpacity(.95),
@@ -119,7 +153,7 @@ class PersonalizeSettingsScreenState extends State<PersonalizeSettingsScreen>
),
),
leading: Icon(
SubjectIcon.resolveVariant(context: context, subject: s),
SubjectIcon.resolveVariant(context: context, subject: s.subject),
size: 22.0,
color: AppColors.of(context).text.withOpacity(.95),
),
@@ -130,12 +164,13 @@ class PersonalizeSettingsScreenState extends State<PersonalizeSettingsScreen>
),
borderRadius: BorderRadius.vertical(
top: Radius.circular(i == 0 ? 12.0 : 4.0),
bottom: Radius.circular(i + 1 == editedSubjects.length ? 12.0 : 4.0),
bottom: Radius.circular(i + 1 == editedShit.length ? 12.0 : 4.0),
),
);
i += 1;
subjectTiles.add(widget);
added.add(s.subject.id);
}
tiles = subjectTiles;
@@ -468,11 +503,11 @@ class PersonalizeSettingsScreenState extends State<PersonalizeSettingsScreen>
isTransparent: true,
children: [
DropdownButton2(
items: otherSubjects
items: otherShit
.map((item) => DropdownMenuItem<String>(
value: item.id,
value: item.subject.id,
child: Text(
item.name,
item.subject.name,
style: TextStyle(
fontSize: 14,
fontWeight: FontWeight.bold,
@@ -486,8 +521,12 @@ class PersonalizeSettingsScreenState extends State<PersonalizeSettingsScreen>
Navigator.of(context, rootNavigator: true).push(
CupertinoPageRoute(
builder: (context) => EditSubjectScreen(
subject:
otherSubjects.firstWhere((e) => e.id == v),
subject: otherShit
.firstWhere((e) => e.subject.id == v)
.subject,
teacher: otherShit
.firstWhere((e) => e.subject.id == v)
.teacher,
),
),
);