import 'dart:developer'; import 'package:flutter/cupertino.dart'; import 'package:flutter/material.dart'; import 'package:jiffy/jiffy.dart'; import 'package:marianum_mobile/api/webuntis/queries/getRooms/getRoomsResponse.dart'; import 'package:marianum_mobile/api/webuntis/queries/getSubjects/getSubjectsResponse.dart'; import 'package:marianum_mobile/data/timetable/timetable.dart'; import 'package:marianum_mobile/screen/pages/timetable/testTimetable.dart'; import 'package:marianum_mobile/widget/loadingSpinner.dart'; import 'package:provider/provider.dart'; import 'package:timetable_view/timetable_view.dart'; import '../../../api/webuntis/queries/getTimetable/getTimetableResponse.dart'; class StoredTimetable extends StatefulWidget { const StoredTimetable({Key? key}) : super(key: key); @override State createState() => _StoredTimetableState(); } class _StoredTimetableState extends State { @override void initState() { super.initState(); WidgetsBinding.instance.addPostFrameCallback((timeStamp) { Provider.of(context, listen: false).run(); }); } @override Widget build(BuildContext context) { return Consumer( builder: (context, value, child) { if(value.getTimetableResponse == null) { return const LoadingSpinner(); } return TimetableView( laneEventsList: _buildLaneEvents(value), onEventTap: (TableEvent event) {}, timetableStyle: CustomTableStyle(context), onEmptySlotTap: (int laneIndex, TableEventTime start, TableEventTime end) => {}, ); }, ); } List _buildLaneEvents(Timetable data) { List laneEvents = List.empty(growable: true); Jiffy.locale("de"); // todo move outwards GetTimetableResponse timetable = data.getTimetableResponse!; GetRoomsResponse rooms = data.getRoomsResponse!; GetSubjectsResponse subjects = data.getSubjectsResponse!; List dayList = timetable.result.map((e) => e.date).toSet().toList(); dayList.sort((a, b) => a-b); dayList.forEach((day) { //Every Day laneEvents.add( LaneEvents( lane: Lane( laneIndex: day, name: "${Jiffy(day.toString()).format("dd.MM.yy")}\n${Jiffy(day.toString()).format("EEEE")}", textStyle: TextStyle( color: Theme.of(context).primaryColor, fontWeight: FontWeight.bold, fontSize: 14 ) ), events: List.generate( timetable.result.where((element) => element.date == day).length, (index) { GetTimetableResponseObject tableEvent = timetable.result.where((element) => element.date == day).elementAt(index); return TableEvent( title: subjects.result.firstWhere((subject) => subject.id == tableEvent.su[0]['id']).longName, eventId: tableEvent.id, laneIndex: day, startTime: parseTime(tableEvent.startTime), endTime: parseTime(tableEvent.endTime), padding: const EdgeInsets.all(5), backgroundColor: Theme.of(context).primaryColor, location: "\n${rooms.result.firstWhere((room) => room.id == tableEvent.ro[0]['id']).name}", ); } ) ) ); }); return laneEvents; } TableEventTime parseTime(int input) { String time = input.toString().length < 4 ? "0$input" : input.toString(); return TableEventTime(hour: int.parse(time.substring(0, 2)), minute: int.parse(time.substring(2, 4))); } }