Skip to content

Commit

Permalink
Add term details page (#1414)
Browse files Browse the repository at this point in the history
  • Loading branch information
nilsreichardt authored Mar 16, 2024
1 parent fd1cd81 commit 9ad3843
Show file tree
Hide file tree
Showing 49 changed files with 853 additions and 88 deletions.
101 changes: 13 additions & 88 deletions app/lib/grades/pages/grades_page/grades_page.dart
Original file line number Diff line number Diff line change
Expand Up @@ -12,6 +12,9 @@ import 'package:provider/provider.dart';
import 'package:sharezone/grades/models/term_id.dart';
import 'package:sharezone/grades/pages/grades_page/grades_page_controller.dart';
import 'package:sharezone/grades/pages/grades_view.dart';
import 'package:sharezone/grades/pages/shared/subject_avatar.dart';
import 'package:sharezone/grades/pages/shared/term_tile.dart';
import 'package:sharezone/grades/pages/term_details_page/term_details_page.dart';
import 'package:sharezone/navigation/models/navigation_item.dart';
import 'package:sharezone/navigation/scaffold/sharezone_main_scaffold.dart';
import 'package:sharezone/support/support_page.dart';
Expand Down Expand Up @@ -194,7 +197,7 @@ class _EmptyTerm3 extends StatelessWidget {
child: Transform(
transform: Matrix4.translationValues(0, -110, 0),
child: const CustomCard(
child: _TermTile(
child: TermTile(
displayName: 'Vergangenes Halbjahr',
avgGrade: ("3,8", GradePerformance.bad),
title: '8/2',
Expand All @@ -218,7 +221,7 @@ class _EmptyTerm2 extends StatelessWidget {
child: Transform(
transform: Matrix4.translationValues(0, -55, 0),
child: const CustomCard(
child: _TermTile(
child: TermTile(
displayName: 'Vergangenes Halbjahr',
avgGrade: ("2,6", GradePerformance.satisfactory),
title: '9/1',
Expand All @@ -238,7 +241,7 @@ class _EmptyTerm1 extends StatelessWidget {
return const Padding(
padding: EdgeInsets.only(top: 70),
child: CustomCard(
child: _TermTile(
child: TermTile(
displayName: 'Aktuelles Halbjahr',
avgGrade: ("1,3", GradePerformance.good),
title: '9/2',
Expand Down Expand Up @@ -299,11 +302,11 @@ class _CurrentTerm extends StatelessWidget {
return Padding(
padding: const EdgeInsets.only(bottom: 8),
child: CustomCard(
onTap: () => _navigateToTerm(context, id),
onTap: () => openTermDetailsPage(context, id),
child: Column(
crossAxisAlignment: CrossAxisAlignment.start,
children: [
_TermTile(
TermTile(
title: 'Aktuelles Halbjahr',
displayName: displayName,
avgGrade: avgGrade,
Expand All @@ -322,12 +325,9 @@ class _CurrentTerm extends StatelessWidget {
for (final subject in subjects)
ListTile(
mouseCursor: SystemMouseCursors.click,
leading: CircleAvatar(
backgroundColor: subject.design.color.withOpacity(0.2),
child: Text(
subject.abbreviation,
style: TextStyle(color: subject.design.color),
),
leading: SubjectAvatar(
design: subject.design,
abbreviation: subject.abbreviation,
),
title: Text(subject.displayName),
trailing: Text(subject.grade,
Expand Down Expand Up @@ -361,8 +361,8 @@ class _PastTerm extends StatelessWidget {
child: SizedBox(
width: double.infinity,
child: CustomCard(
onTap: () => _navigateToTerm(context, id),
child: _TermTile(
onTap: () => openTermDetailsPage(context, id),
child: TermTile(
title: 'Vergangenes Halbjahr',
displayName: displayName,
avgGrade: avgGrade,
Expand All @@ -372,78 +372,3 @@ class _PastTerm extends StatelessWidget {
);
}
}

class _TermGrade extends StatelessWidget {
const _TermGrade({required this.grade});

final AvgGradeView grade;

@override
Widget build(BuildContext context) {
return Container(
padding: const EdgeInsets.symmetric(horizontal: 12, vertical: 4),
decoration: BoxDecoration(
borderRadius: BorderRadius.circular(8),
color: grade.$2.toColor().withOpacity(0.1),
),
child: Text(
'⌀ ${grade.$1}',
style: TextStyle(
color: grade.$2.toColor(),
fontWeight: FontWeight.w500,
fontSize: 18,
),
),
);
}
}

class _TermTile extends StatelessWidget {
const _TermTile({
required this.displayName,
required this.avgGrade,
required this.title,
});

final String title;
final DisplayName displayName;
final AvgGradeView avgGrade;

@override
Widget build(BuildContext context) {
return Padding(
padding: const EdgeInsets.all(12),
child: Row(
children: [
Expanded(
child: Column(
mainAxisSize: MainAxisSize.min,
crossAxisAlignment: CrossAxisAlignment.start,
children: [
Text(
title,
style: const TextStyle(
color: Colors.grey,
),
),
Text(
displayName,
style: const TextStyle(
fontSize: 16,
fontWeight: FontWeight.w500,
),
),
],
),
),
const SizedBox(width: 6),
_TermGrade(grade: avgGrade)
],
),
);
}
}

void _navigateToTerm(BuildContext context, TermId termId) {
snackbarSoon(context: context);
}
32 changes: 32 additions & 0 deletions app/lib/grades/pages/shared/subject_avatar.dart
Original file line number Diff line number Diff line change
@@ -0,0 +1,32 @@
// Copyright (c) 2024 Sharezone UG (haftungsbeschränkt)
// Licensed under the EUPL-1.2-or-later.
//
// You may obtain a copy of the Licence at:
// https://joinup.ec.europa.eu/software/page/eupl
//
// SPDX-License-Identifier: EUPL-1.2

import 'package:design/design.dart';
import 'package:flutter/material.dart';

class SubjectAvatar extends StatelessWidget {
const SubjectAvatar({
super.key,
required this.design,
required this.abbreviation,
});

final String abbreviation;
final Design design;

@override
Widget build(BuildContext context) {
return CircleAvatar(
backgroundColor: design.color.withOpacity(0.2),
child: Text(
abbreviation,
style: TextStyle(color: design.color),
),
);
}
}
82 changes: 82 additions & 0 deletions app/lib/grades/pages/shared/term_tile.dart
Original file line number Diff line number Diff line change
@@ -0,0 +1,82 @@
// Copyright (c) 2024 Sharezone UG (haftungsbeschränkt)
// Licensed under the EUPL-1.2-or-later.
//
// You may obtain a copy of the Licence at:
// https://joinup.ec.europa.eu/software/page/eupl
//
// SPDX-License-Identifier: EUPL-1.2

import 'package:flutter/material.dart';
import 'package:sharezone/grades/pages/grades_view.dart';

class TermTile extends StatelessWidget {
const TermTile({
super.key,
required this.displayName,
required this.avgGrade,
required this.title,
});

final String title;
final DisplayName displayName;
final AvgGradeView avgGrade;

@override
Widget build(BuildContext context) {
return Padding(
padding: const EdgeInsets.all(12),
child: Row(
children: [
Expanded(
child: Column(
mainAxisSize: MainAxisSize.min,
crossAxisAlignment: CrossAxisAlignment.start,
children: [
Text(
title,
style: const TextStyle(
color: Colors.grey,
),
),
Text(
displayName,
style: const TextStyle(
fontSize: 16,
fontWeight: FontWeight.w500,
),
),
],
),
),
const SizedBox(width: 6),
_TermGrade(grade: avgGrade)
],
),
);
}
}

class _TermGrade extends StatelessWidget {
const _TermGrade({required this.grade});

final AvgGradeView grade;

@override
Widget build(BuildContext context) {
return Container(
padding: const EdgeInsets.symmetric(horizontal: 12, vertical: 4),
decoration: BoxDecoration(
borderRadius: BorderRadius.circular(8),
color: grade.$2.toColor().withOpacity(0.1),
),
child: Text(
'⌀ ${grade.$1}',
style: TextStyle(
color: grade.$2.toColor(),
fontWeight: FontWeight.w500,
fontSize: 18,
),
),
);
}
}
Loading

0 comments on commit 9ad3843

Please sign in to comment.