import 'dart:developer'; import 'package:flutter/cupertino.dart'; import 'package:flutter/material.dart'; import 'package:marianum_mobile/widget/loadingPacket.dart'; import 'package:provider/provider.dart'; import 'package:timetable_view/timetable_view.dart'; import '../../../dataOld/incommingPackets/timetablePacket.dart'; class Timetable extends StatefulWidget { const Timetable({Key? key}) : super(key: key); @override State createState() => _TimetableState(); } class _TimetableState extends State { @override void initState() { Provider.of(context, listen: false).invoke(); super.initState(); } @override Widget build(BuildContext context) { return Consumer( builder: (context, data, child) { return LoadingPacket(packet: data, child: TimetableView( laneEventsList: _buildLaneEvents(context, data), onEventTap: (TableEvent event) {}, timetableStyle: CustomTableStyle(context), onEmptySlotTap: (int laneIndex, TableEventTime start, TableEventTime end) => {}, )); }, ); } List _buildLaneEvents(context, TimetablePacket data) { List laneEvents = List.empty(growable: true); data.timeTable.days.forEach((day) { List tableEvents = List.empty(growable: true); day.entries.forEach((element) { tableEvents.add( TableEvent( backgroundColor: Theme.of(context).primaryColor, padding: const EdgeInsets.all(5), title: element.subject, location: "\n${element.room}", eventId: tableEvents.length, laneIndex: tableEvents.length, startTime: TableEventTime(hour: element.start.hour, minute: element.start.minute), endTime: TableEventTime(hour: element.end.hour, minute: element.end.minute) ) ); }); laneEvents.add( LaneEvents( lane: Lane(laneIndex: laneEvents.length, name: day.name, textStyle: TextStyle(color: Theme.of(context).primaryColor, fontWeight: FontWeight.bold)), events: tableEvents ) ); }); return laneEvents; } void onEventTapCallBack(TableEvent event) { print( "Event Clicked!! LaneIndex ${event.laneIndex} Title: ${event.title} StartHour: ${event.startTime.hour} EndHour: ${event.endTime.hour}"); } void onTimeSlotTappedCallBack( int laneIndex, TableEventTime start, TableEventTime end) { print( "Empty Slot Clicked !! LaneIndex: $laneIndex StartHour: ${start.hour} EndHour: ${end.hour}"); } } class CustomTableStyle extends TimetableStyle { dynamic context; CustomTableStyle(context) { this.context = context; } @override int get startHour => 07; @override int get endHour => 17; @override double get laneWidth => 200; @override Color get cornerColor => Theme.of(this.context).primaryColor; @override Color get timeItemTextColor => Theme.of(this.context).primaryColor; @override // TODO: implement timeItemHeight double get timeItemHeight => 60; }