Skip to main content

Timetable

View weekly class timetable.

Get Timetable

GET /teacher/teachers/get-time-table-teacher
{
"data": {
"weekdays": {
"MONDAY": [
{ "period": 1, "className": "Class 5-A", "subject": "Mathematics", "startTime": "08:00", "endTime": "08:45" },
{ "period": 2, "className": "Class 6-A", "subject": "Science", "startTime": "08:45", "endTime": "09:30" }
],
"TUESDAY": [...],
"WEDNESDAY": [...],
"THURSDAY": [...],
"FRIDAY": [...]
}
}
}

UI — Weekly Timetable

class TimetableScreen extends StatelessWidget {
@override
Widget build(BuildContext context) {
final vm = context.watch<TimetableViewModel>();

return DefaultTabController(
length: 5,
child: Scaffold(
appBar: const TabBar(
isScrollable: true,
tabs: ['Monday', 'Tuesday', 'Wednesday', 'Thursday', 'Friday']
.map((d) => Tab(text: d))
.toList(),
),
body: TabBarView(
children: [
_DayTimetable(periods: vm.getPeriodsFor('MONDAY')),
_DayTimetable(periods: vm.getPeriodsFor('TUESDAY')),
_DayTimetable(periods: vm.getPeriodsFor('WEDNESDAY')),
_DayTimetable(periods: vm.getPeriodsFor('THURSDAY')),
_DayTimetable(periods: vm.getPeriodsFor('FRIDAY')),
],
),
),
);
}
}

class _DayTimetable extends StatelessWidget {
final List<Period> periods;

@override
Widget build(BuildContext context) {
return ListView.builder(
itemCount: periods.length,
itemBuilder: (_, i) {
final period = periods[i];
return Card(
child: ListTile(
leading: CircleAvatar(
backgroundColor: Colors.blue.shade100,
child: Text('${i + 1}', style: const TextStyle(color: Colors.blue)),
),
title: Text(period.subject),
subtitle: Text('${period.className} • ${period.startTime} - ${period.endTime}'),
trailing: TextButton(
onPressed: () => Navigator.pushNamed(
'/attendance',
arguments: {'classId': period.classId, 'subject': period.subject},
),
child: const Text('Mark Attendance'),
),
),
);
},
);
}
}