tt & grades: filter for events

This commit is contained in:
2025-08-29 14:41:45 +02:00
parent 509808b41a
commit 7205a9565e
5 changed files with 40 additions and 9 deletions

View File

@@ -23,6 +23,10 @@ class OmissionConsts {
static const na = "Na";
}
class TimetableConsts {
static const event = "TanevRendjeEsemeny";
}
class KretaEndpoints {
static String kretaBase = "e-kreta.hu";

View File

@@ -6,6 +6,7 @@ import 'package:firka/ui/phone/screens/home/home_screen.dart';
import 'package:firka/ui/widget/grade_small_card.dart';
import 'package:flutter/material.dart';
import '../../../../helpers/api/consts.dart';
import '../../../../helpers/api/model/grade.dart';
import '../../../../helpers/api/model/subject.dart';
import '../../../../helpers/api/model/timetable.dart';
@@ -222,7 +223,11 @@ class _HomeGradesScreen extends State<HomeGradesScreen> {
],
right: [
Text(
week!.response!.length.toString(),
week!.response!
.where((lesson) =>
lesson.type.name != TimetableConsts.event)
.length
.toString(),
style: appStyle.fonts.B_14SB
.apply(color: appStyle.colors.textPrimary),
),

View File

@@ -8,6 +8,7 @@ import 'package:flutter/material.dart';
import 'package:majesticons_flutter/majesticons_flutter.dart';
import 'package:transparent_pointer/transparent_pointer.dart';
import '../../../../helpers/api/consts.dart';
import '../../../../helpers/update_notifier.dart';
import '../../../../main.dart';
import '../../../widget/firka_icon.dart';
@@ -32,6 +33,7 @@ class HomeTimetableScreen extends StatefulWidget {
class _HomeTimetableScreen extends State<HomeTimetableScreen> {
List<Lesson>? lessons;
List<Lesson>? events;
List<DateTime>? dates;
DateTime? now;
int active = 0;
@@ -48,7 +50,12 @@ class _HomeTimetableScreen extends State<HomeTimetableScreen> {
List<DateTime> dates = List.empty(growable: true);
if (lessonsResp.response != null) {
lessons = lessonsResp.response;
lessons = lessonsResp.response
?.where((lesson) => lesson.type.name != TimetableConsts.event)
.toList();
events = lessonsResp.response
?.where((lesson) => lesson.type.name == TimetableConsts.event)
.toList();
for (var i = 0; i < 7; i++) {
var t = monday.add(Duration(days: i));
@@ -115,7 +122,7 @@ class _HomeTimetableScreen extends State<HomeTimetableScreen> {
@override
Widget build(BuildContext context) {
if (lessons != null && dates != null) {
if (lessons != null && events != null && dates != null) {
List<Widget> ttWidgets = [];
List<Widget> ttDays = [];
@@ -129,13 +136,19 @@ class _HomeTimetableScreen extends State<HomeTimetableScreen> {
});
}, active == i, date));
var lessonsOnDate = lessons!
final lessonsOnDate = lessons!
.where((lesson) =>
lesson.start.isAfter(date) &&
lesson.end.isBefore(date.add(Duration(hours: 24))))
.toList();
final eventsOnDate = events!
.where((lesson) =>
lesson.start.isAfter(date) &&
lesson.end.isBefore(date.add(Duration(hours: 24))))
.toList();
ttDays.add(TimeTableDayWidget(widget.data.l10n, date, lessonsOnDate));
ttDays.add(TimeTableDayWidget(
widget.data.l10n, date, lessonsOnDate, eventsOnDate));
}
return Stack(children: [

View File

@@ -60,7 +60,9 @@ class _HomeTimetableMonthlyScreen extends State<HomeTimetableMonthlyScreen> {
}
if (lessonsResp.response != null) {
lessons = lessonsResp.response;
lessons = lessonsResp.response
?.where((lesson) => lesson.type.name != TimetableConsts.event)
.toList();
}
if (mounted) {

View File

@@ -1,5 +1,6 @@
import 'package:firka/helpers/api/model/timetable.dart';
import 'package:firka/helpers/extensions.dart';
import 'package:firka/helpers/ui/firka_card.dart';
import 'package:firka/l10n/app_localizations.dart';
import 'package:flutter/material.dart';
import 'package:flutter_svg/svg.dart';
@@ -10,15 +11,17 @@ class TimeTableDayWidget extends StatelessWidget {
final AppLocalizations l10n;
final DateTime date;
final List<Lesson> lessons;
final List<Lesson> events;
const TimeTableDayWidget(this.l10n, this.date, this.lessons, {super.key});
const TimeTableDayWidget(this.l10n, this.date, this.lessons, this.events,
{super.key});
@override
Widget build(BuildContext context) {
Widget noLessonsWidget = SizedBox();
List<Widget> ttBody = List.empty(growable: true);
if (lessons.isEmpty) {
if (lessons.isEmpty && events.isEmpty) {
noLessonsWidget = Column(
mainAxisAlignment: MainAxisAlignment.center,
crossAxisAlignment: CrossAxisAlignment.center,
@@ -30,6 +33,10 @@ class TimeTableDayWidget extends StatelessWidget {
Text(l10n.tt_no_classes_l2)
]);
} else {
for (var i = 0; i < events.length; i++) {
var event = events[i];
ttBody.add(FirkaCard(left: [Text(event.name)]));
}
for (var i = 0; i < lessons.length; i++) {
var lesson = lessons[i];
Lesson? nextLesson = lessons.length > i + 1 ? lessons[i + 1] : null;
@@ -40,7 +47,7 @@ class TimeTableDayWidget extends StatelessWidget {
return SizedBox(
width: MediaQuery.of(context).size.width / 1.1,
child: lessons.isEmpty
child: ttBody.isEmpty
? noLessonsWidget
: Padding(
padding: