Skip to content

Commit

Permalink
Feature/aggregate academic path page (#1102)
Browse files Browse the repository at this point in the history
Feature/aggregate academic path page
  • Loading branch information
LuisDuarte1 authored Feb 7, 2024
2 parents e638011 + 94694a4 commit d2c3995
Show file tree
Hide file tree
Showing 8 changed files with 139 additions and 3 deletions.
1 change: 1 addition & 0 deletions uni/lib/generated/intl/messages_en.dart
Original file line number Diff line number Diff line change
Expand Up @@ -35,6 +35,7 @@ class MessageLookup extends MessageLookupByLibrary {
'restaurantes': 'Restaurants',
'calendario': 'Calendar',
'biblioteca': 'Library',
'percurso_academico': 'Academic Path',
'uteis': 'Utils',
'other': 'Other',
})}";
Expand Down
1 change: 1 addition & 0 deletions uni/lib/generated/intl/messages_pt_PT.dart
Original file line number Diff line number Diff line change
Expand Up @@ -35,6 +35,7 @@ class MessageLookup extends MessageLookupByLibrary {
'restaurantes': 'Restaurantes',
'calendario': 'Calendário',
'biblioteca': 'Biblioteca',
'percurso_academico': 'Percurso Académico',
'uteis': 'Úteis',
'other': 'Outros',
})}";
Expand Down
2 changes: 1 addition & 1 deletion uni/lib/l10n/intl_en.arb
Original file line number Diff line number Diff line change
Expand Up @@ -166,7 +166,7 @@
"@min_value_reference": {},
"multimedia_center": "Multimedia center",
"@multimedia_center": {},
"nav_title": "{title, select, horario{Schedule} exames{Exams} area{Personal Area} cadeiras{Course Units} autocarros{Buses} locais{Places} restaurantes{Restaurants} calendario{Calendar} biblioteca{Library} uteis{Utils} other{Other}}",
"nav_title": "{title, select, horario{Schedule} exames{Exams} area{Personal Area} cadeiras{Course Units} autocarros{Buses} locais{Places} restaurantes{Restaurants} calendario{Calendar} biblioteca{Library} percurso_academico{Academic Path} uteis{Utils} other{Other}}",
"@nav_title": {},
"news": "News",
"@news": {},
Expand Down
2 changes: 1 addition & 1 deletion uni/lib/l10n/intl_pt_PT.arb
Original file line number Diff line number Diff line change
Expand Up @@ -166,7 +166,7 @@
"@min_value_reference": {},
"multimedia_center": "Centro de multimédia",
"@multimedia_center": {},
"nav_title": "{title, select, horario{Horário} exames{Exames} area{Área Pessoal} cadeiras{Cadeiras} autocarros{Autocarros} locais{Locais} restaurantes{Restaurantes} calendario{Calendário} biblioteca{Biblioteca} uteis{Úteis} other{Outros}}",
"nav_title": "{title, select, horario{Horário} exames{Exames} area{Área Pessoal} cadeiras{Cadeiras} autocarros{Autocarros} locais{Locais} restaurantes{Restaurantes} calendario{Calendário} biblioteca{Biblioteca} percurso_academico{Percurso Académico} uteis{Úteis} other{Outros}}",
"@nav_title": {},
"news": "Notícias",
"@news": {},
Expand Down
6 changes: 6 additions & 0 deletions uni/lib/main.dart
Original file line number Diff line number Diff line change
Expand Up @@ -29,6 +29,7 @@ import 'package:uni/model/providers/startup/profile_provider.dart';
import 'package:uni/model/providers/startup/session_provider.dart';
import 'package:uni/model/providers/state_providers.dart';
import 'package:uni/utils/drawer_items.dart';
import 'package:uni/view/academic_path/academic_path.dart';
import 'package:uni/view/bus_stop_next_arrivals/bus_stop_next_arrivals.dart';
import 'package:uni/view/calendar/calendar.dart';
import 'package:uni/view/common_widgets/page_transition.dart';
Expand Down Expand Up @@ -273,6 +274,11 @@ class ApplicationState extends State<Application> {
page: const UsefulInfoPageView(),
settings: settings,
),
'/${DrawerItem.navAcademicPath.title}':
PageTransition.makePageTransition(
page: const AcademicPathPageView(),
settings: settings,
),
};
return transitions[settings.name];
},
Expand Down
3 changes: 2 additions & 1 deletion uni/lib/utils/drawer_items.dart
Original file line number Diff line number Diff line change
Expand Up @@ -8,7 +8,8 @@ enum DrawerItem {
navRestaurants('restaurantes'),
navCalendar('calendario'),
navLibrary('biblioteca', faculties: {'feup'}),
navUsefulInfo('uteis', faculties: {'feup'});
navUsefulInfo('uteis', faculties: {'feup'}),
navAcademicPath('percurso_academico');

const DrawerItem(this.title, {this.faculties});

Expand Down
46 changes: 46 additions & 0 deletions uni/lib/view/academic_path/academic_path.dart
Original file line number Diff line number Diff line change
@@ -0,0 +1,46 @@
import 'package:flutter/material.dart';
import 'package:uni/generated/l10n.dart';
import 'package:uni/utils/drawer_items.dart';
import 'package:uni/view/academic_path/widgets/course_units_card.dart';
import 'package:uni/view/common_widgets/generic_card.dart';
import 'package:uni/view/common_widgets/page_title.dart';
import 'package:uni/view/common_widgets/pages_layouts/general/general.dart';
import 'package:uni/view/home/widgets/exam_card.dart';
import 'package:uni/view/home/widgets/schedule_card.dart';

class AcademicPathPageView extends StatefulWidget {
const AcademicPathPageView({super.key});

@override
State<StatefulWidget> createState() => AcademicPathPageViewState();
}

class AcademicPathPageViewState extends GeneralPageViewState {
List<GenericCard> academicPathCards = [
ScheduleCard(),
ExamCard(),
CourseUnitsCard(),
// Add more cards if needed
];

@override
Widget getBody(BuildContext context) {
return ListView(
children: [
PageTitle(
name: S.of(context).nav_title(DrawerItem.navAcademicPath.title),
),
Column(
children: academicPathCards,
),
],
);
}

@override
Future<void> onRefresh(BuildContext context) async {
for (final card in academicPathCards) {
card.onRefresh(context);
}
}
}
81 changes: 81 additions & 0 deletions uni/lib/view/academic_path/widgets/course_units_card.dart
Original file line number Diff line number Diff line change
@@ -0,0 +1,81 @@
import 'package:flutter/material.dart';
import 'package:provider/provider.dart';
import 'package:uni/generated/l10n.dart';
import 'package:uni/model/entities/course_units/course_unit.dart';
import 'package:uni/model/entities/profile.dart';
import 'package:uni/model/providers/startup/profile_provider.dart';
import 'package:uni/utils/drawer_items.dart';
import 'package:uni/view/common_widgets/generic_card.dart';
import 'package:uni/view/course_units/widgets/course_unit_card.dart';
import 'package:uni/view/lazy_consumer.dart';

class CourseUnitsCard extends GenericCard {
CourseUnitsCard({super.key});

@override
void onRefresh(BuildContext context) {
Provider.of<ProfileProvider>(context, listen: false).forceRefresh(context);
}

@override
Widget buildCardContent(BuildContext context) {
return LazyConsumer<ProfileProvider, Profile>(
builder: (context, profile) {
final courseUnits = profile.courseUnits
.where(
(courseUnit) =>
courseUnit.enrollmentIsValid() && courseUnit.grade == '',
)
.take(5)
.toList();
return _generateCourseUnitsCards(courseUnits, context);
},
hasContent: (Profile profile) => profile.courseUnits.isNotEmpty,
onNullContent: Center(
heightFactor: 10,
child: Text(
S.of(context).no_course_units,
style: Theme.of(context).textTheme.titleLarge,
),
),
);
}

Widget _generateCourseUnitsCards(
List<CourseUnit> courseUnits,
BuildContext context,
) {
if (courseUnits.isEmpty) {
return Center(
heightFactor: 3,
child: Text(
S.of(context).no_course_units,
style: Theme.of(context).textTheme.titleLarge,
),
);
}

return Column(
children: courseUnits
.map(
(courseUnit) => Column(
children: [
Padding(
padding: const EdgeInsets.all(5),
child: CourseUnitCard(courseUnit),
),
],
),
)
.toList(),
);
}

@override
String getTitle(BuildContext context) =>
S.of(context).nav_title(DrawerItem.navCourseUnits.title);

@override
Future<Object?> onClick(BuildContext context) =>
Navigator.pushNamed(context, '/${DrawerItem.navCourseUnits.title}');
}

0 comments on commit d2c3995

Please sign in to comment.