import 'package:bottom_sheet/bottom_sheet.dart'; import 'package:flutter/foundation.dart'; import 'package:flutter/material.dart'; import 'package:jiffy/jiffy.dart'; import 'package:persistent_bottom_nav_bar/persistent_tab_view.dart'; import 'package:syncfusion_flutter_calendar/calendar.dart'; import '../../../api/webuntis/queries/getRooms/getRoomsResponse.dart'; import '../../../api/webuntis/queries/getSubjects/getSubjectsResponse.dart'; import '../../../api/webuntis/queries/getTimetable/getTimetableResponse.dart'; import '../../../model/timetable/timetableProps.dart'; import '../../../widget/debug/debugTile.dart'; import '../../../widget/unimplementedDialog.dart'; import '../more/roomplan/roomplan.dart'; class AppointmentDetails { static String _getEventPrefix(String? code) { if(code == "cancelled") return "Entfällt: "; if(code == "irregular") return "Änderung: "; return code ?? ""; } static void show(BuildContext context, TimetableProps webuntisData, Appointment appointment) { GetTimetableResponseObject timetableData = appointment.id as GetTimetableResponseObject; GetSubjectsResponseObject subject; GetRoomsResponseObject room; try { subject = webuntisData.getSubjectsResponse.result.firstWhere((subject) => subject.id == timetableData.su[0].id); } catch(e) { subject = GetSubjectsResponseObject(0, "?", "Unbekannt", "?", true); } try { room = webuntisData.getRoomsResponse.result.firstWhere((room) => room.id == timetableData.ro[0].id); } catch(e) { room = GetRoomsResponseObject(0, "?", "Unbekannt", true, "?"); } showStickyFlexibleBottomSheet( minHeight: 0, initHeight: 0.4, maxHeight: 0.7, anchors: [0, 0.4, 0.7], isSafeArea: true, maxHeaderHeight: 150, context: context, headerBuilder: (context, bottomSheetOffset) => Padding( padding: const EdgeInsets.symmetric(vertical: 30), child: Center( child: Column( mainAxisSize: MainAxisSize.min, children: [ Text("${_getEventPrefix(timetableData.code)}${subject.alternateName} - (${subject.longName})", style: const TextStyle(fontSize: 30)), Text("${Jiffy.parseFromDateTime(appointment.startTime).format(pattern: "HH:mm")} - ${Jiffy.parseFromDateTime(appointment.endTime).format(pattern: "HH:mm")}", style: const TextStyle(fontSize: 15)), ], ), ), ), bodyBuilder: (context, bottomSheetOffset) => SliverChildListDelegate( [ ListTile( leading: const Icon(Icons.notifications_active), title: Text("Status: ${timetableData.code != null ? "Geändert" : "Regulär"}"), ), ListTile( leading: const Icon(Icons.room), title: Text("Raum: ${room.name} (${room.longName})"), trailing: IconButton( icon: const Icon(Icons.house_outlined), onPressed: () { PersistentNavBarNavigator.pushNewScreen(context, withNavBar: false, screen: const Roomplan()); }, ), ), ListTile( leading: const Icon(Icons.person), title: Text("Lehrkraft: ${timetableData.te[0].name} ${timetableData.te[0].longname.isNotEmpty ? "(${timetableData.te[0].longname})" : ""}"), trailing: Visibility( visible: !kReleaseMode, child: IconButton( icon: const Icon(Icons.textsms_outlined), onPressed: () { UnimplementedDialog.show(context); }, ), ), ), ListTile( leading: const Icon(Icons.abc), title: Text("Typ: ${timetableData.activityType}"), ), ListTile( leading: const Icon(Icons.people), title: Text("Klasse(n): ${timetableData.kl.map((e) => e.name).join(", ")}"), ), DebugTile(context).jsonData(timetableData.toJson()), ], ), ); } }