forked from firka/firka
169 lines
4.7 KiB
Dart
169 lines
4.7 KiB
Dart
import 'package:firka/core/settings.dart';
|
|
import 'package:firka_common/firka_common.dart';
|
|
import 'package:kreta_api/kreta_api.dart';
|
|
import 'package:firka/core/extensions.dart';
|
|
import 'package:firka/ui/components/firka_card.dart';
|
|
import 'package:firka/app/app_state.dart';
|
|
import 'package:firka/ui/theme/style.dart';
|
|
import 'package:flutter/material.dart';
|
|
import 'package:flutter_svg/svg.dart';
|
|
import 'package:majesticons_flutter/majesticons_flutter.dart';
|
|
|
|
import 'lesson.dart';
|
|
|
|
class TimeTableDayWidget extends StatelessWidget {
|
|
final AppInitialization data;
|
|
final DateTime date;
|
|
final List<Lesson> week;
|
|
final List<Lesson> lessons;
|
|
final List<Lesson> events;
|
|
final List<Test> tests;
|
|
final List<Lesson> day;
|
|
|
|
const TimeTableDayWidget(
|
|
this.data,
|
|
this.date,
|
|
this.week,
|
|
this.lessons,
|
|
this.events,
|
|
this.tests,
|
|
this.day, {
|
|
super.key,
|
|
});
|
|
|
|
@override
|
|
Widget build(BuildContext context) {
|
|
Widget ttBody;
|
|
|
|
if (lessons.isEmpty) {
|
|
ttBody = Column(
|
|
mainAxisAlignment: MainAxisAlignment.center,
|
|
crossAxisAlignment: CrossAxisAlignment.center,
|
|
children: [
|
|
SvgPicture.asset(
|
|
"assets/images/logos/dave.svg",
|
|
width: 48,
|
|
height: 48,
|
|
),
|
|
SizedBox(height: 12),
|
|
Text(
|
|
data.l10n.tt_no_classes_l1,
|
|
style: appStyle.fonts.B_16R.apply(
|
|
color: appStyle.colors.textSecondary,
|
|
),
|
|
),
|
|
Text(
|
|
data.l10n.tt_no_classes_l2,
|
|
style: appStyle.fonts.B_16R.apply(
|
|
color: appStyle.colors.textSecondary,
|
|
),
|
|
),
|
|
if (events.isNotEmpty)
|
|
...events.map(
|
|
(event) => Center(
|
|
child: Text(
|
|
event.name.replaceAll(" (Nem órarendi nap)", ""),
|
|
style: appStyle.fonts.B_16R.apply(
|
|
color: appStyle.colors.textSecondary,
|
|
),
|
|
),
|
|
),
|
|
),
|
|
],
|
|
);
|
|
} else {
|
|
List<Widget> ttLessons = List.empty(growable: true);
|
|
for (var i = 0; i < events.length; i++) {
|
|
var event = events[i];
|
|
ttLessons.add(
|
|
FirkaCard.single(
|
|
margin: EdgeInsets.zero,
|
|
padding: EdgeInsets.all(16),
|
|
child: Text(
|
|
event.name,
|
|
style: appStyle.fonts.B_16R.apply(
|
|
color: appStyle.colors.textPrimary,
|
|
),
|
|
),
|
|
),
|
|
);
|
|
}
|
|
|
|
if (events.isNotEmpty) {
|
|
ttLessons.add(
|
|
SizedBox()
|
|
);
|
|
}
|
|
|
|
var showBreak = data.settings
|
|
.group("settings")
|
|
.subGroup("timetable_toast")
|
|
.boolean("breaks");
|
|
|
|
for (var i = 0; i < lessons.length; i++) {
|
|
var lesson = lessons[i];
|
|
var nextLesson = lessons.length > i + 1 ? lessons[i + 1] : null;
|
|
ttLessons.add(
|
|
LessonWidget(
|
|
data,
|
|
lessons.getLessonNo(lesson),
|
|
lesson,
|
|
tests.firstWhereOrNull(
|
|
(test) => test.lessonNumber == lesson.lessonNumber,
|
|
),
|
|
active: timeNow().isBetween(
|
|
i > 0 ? lessons[i - 1].end : lesson.start,
|
|
lesson.end,
|
|
),
|
|
),
|
|
);
|
|
|
|
if (!showBreak || nextLesson == null) {
|
|
continue;
|
|
}
|
|
|
|
var breakMins = nextLesson.start.difference(lesson.end).inMinutes;
|
|
ttLessons.add(
|
|
FirkaCard(
|
|
color: appStyle.colors.cardTranslucent,
|
|
margin: EdgeInsets.all(0),
|
|
padding: EdgeInsets.symmetric(vertical: 11, horizontal: 16),
|
|
shadow: false,
|
|
left: [
|
|
Text(
|
|
initData.l10n.breakTxt,
|
|
style: appStyle.fonts.B_14SB.copyWith(
|
|
color: appStyle.colors.textSecondary,
|
|
),
|
|
),
|
|
],
|
|
right: [
|
|
Text(
|
|
"$breakMins ${breakMins > 1 ? initData.l10n.starting_min_plural : initData.l10n.starting_min}",
|
|
style: appStyle.fonts.B_14R.copyWith(
|
|
color: appStyle.colors.textSecondary,
|
|
),
|
|
),
|
|
],
|
|
),
|
|
);
|
|
}
|
|
|
|
ttBody = Padding(
|
|
padding: const EdgeInsets.only(top: 70 + 16 + 20, left: 20, right: 20),
|
|
child: SingleChildScrollView(
|
|
child: Column(
|
|
mainAxisSize: MainAxisSize.min,
|
|
mainAxisAlignment: MainAxisAlignment.start,
|
|
crossAxisAlignment: CrossAxisAlignment.start,
|
|
spacing: 16,
|
|
children: [...ttLessons, SizedBox(height: 55)],
|
|
),
|
|
),
|
|
);
|
|
}
|
|
|
|
return ttBody;
|
|
}
|
|
}
|