From be17c9a5ab3ba83a1072b3dc357252577ea71a6d Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Elias=20M=C3=BCller?= Date: Fri, 9 Feb 2024 16:39:04 +0100 Subject: [PATCH] Added timetable custom event dialog --- .../addCustomTimetableEventDialog.dart | 141 ++++++++++++++++++ lib/view/pages/timetable/timetable.dart | 7 + 2 files changed, 148 insertions(+) create mode 100644 lib/view/pages/timetable/addCustomTimetableEventDialog.dart diff --git a/lib/view/pages/timetable/addCustomTimetableEventDialog.dart b/lib/view/pages/timetable/addCustomTimetableEventDialog.dart new file mode 100644 index 0000000..8a55b49 --- /dev/null +++ b/lib/view/pages/timetable/addCustomTimetableEventDialog.dart @@ -0,0 +1,141 @@ +import 'package:flutter/material.dart'; + +class AddCustomTimetableEventDialog extends StatefulWidget { + const AddCustomTimetableEventDialog({super.key}); + + @override + State createState() => _AddCustomTimetableEventDialogState(); +} + +class _AddCustomTimetableEventDialogState extends State { + DateTime _selectedDate = DateTime.now(); + TimeOfDay _selectedStartTime = TimeOfDay.now(); + TimeOfDay _selectedEndTime = TimeOfDay.now(); + final TextEditingController _eventNameController = TextEditingController(); + bool _isRecurring = false; + String _recurringFrequency = 'Wöchentlich'; + + @override + Widget build(BuildContext context) { + return AlertDialog( + title: const Text('Termin hinzufügen'), + content: SingleChildScrollView( + child: Column( + mainAxisSize: MainAxisSize.min, + children: [ + ListTile( + title: const Text('Startdatum:'), + subtitle: Text('${_selectedDate.day}/${_selectedDate.month}/${_selectedDate.year}'), + onTap: () async { + final DateTime? pickedDate = await showDatePicker( + context: context, + initialDate: _selectedDate, + firstDate: DateTime.now(), + lastDate: DateTime(2101), + ); + if (pickedDate != null && pickedDate != _selectedDate) { + setState(() { + _selectedDate = pickedDate; + }); + } + }, + ), + ListTile( + title: const Text('Startzeit:'), + subtitle: Text('${_selectedStartTime.hour}:${_selectedStartTime.minute}'), + onTap: () async { + final TimeOfDay? pickedTime = await showTimePicker( + context: context, + initialTime: _selectedStartTime, + ); + if (pickedTime != null && pickedTime != _selectedStartTime) { + setState(() { + _selectedStartTime = pickedTime; + }); + } + }, + ), + ListTile( + title: const Text('Endzeit:'), + subtitle: Text('${_selectedEndTime.hour}:${_selectedEndTime.minute}'), + onTap: () async { + final TimeOfDay? pickedTime = await showTimePicker( + context: context, + initialTime: _selectedEndTime, + ); + if (pickedTime != null && pickedTime != _selectedEndTime) { + setState(() { + _selectedEndTime = pickedTime; + }); + } + }, + ), + TextField( + controller: _eventNameController, + decoration: const InputDecoration(labelText: 'Terminname'), + ), + CheckboxListTile( + title: const Text('Wiederholend'), + value: _isRecurring, + onChanged: (bool? value) { + setState(() { + _isRecurring = value!; + }); + }, + ), + if (_isRecurring) ...[ + DropdownButtonFormField( + value: _recurringFrequency, + items: ['Wöchentlich', 'Täglich', 'Monatlich'].map((String value) { + return DropdownMenuItem( + value: value, + child: Text(value), + ); + }).toList(), + onChanged: (String? value) { + setState(() { + _recurringFrequency = value ?? ""; + }); + }, + ), + // Hier könntest du weitere Felder für die Wiederholungseigenschaften hinzufügen + ], + ], + ), + ), + actions: [ + TextButton( + onPressed: () { + Navigator.of(context).pop(); + }, + child: const Text('Abbrechen'), + ), + TextButton( + onPressed: () { + // Hier kannst du die Eingaben verwenden + String startDate = '${_selectedDate.day}/${_selectedDate.month}/${_selectedDate.year}'; + String startTime = '${_selectedStartTime.hour}:${_selectedStartTime.minute}'; + String endTime = '${_selectedEndTime.hour}:${_selectedEndTime.minute}'; + String eventName = _eventNameController.text; + bool isRecurring = _isRecurring; + String recurringFrequency = _recurringFrequency; + + // Hier kannst du die Daten speichern oder weiterverarbeiten + print('Startdatum: $startDate'); + print('Startzeit: $startTime'); + print('Endzeit: $endTime'); + print('Terminname: $eventName'); + print('Wiederholend: $isRecurring'); + if (_isRecurring) { + print('Wiederholungs-Frequenz: $recurringFrequency'); + } + + // Hier könntest du die Termindaten weiterverarbeiten, z.B. speichern und den Dialog schließen + Navigator.of(context).pop(); + }, + child: const Text('Hinzufügen'), + ), + ], + ); + } +} diff --git a/lib/view/pages/timetable/timetable.dart b/lib/view/pages/timetable/timetable.dart index b79ebf4..7cfdbaf 100644 --- a/lib/view/pages/timetable/timetable.dart +++ b/lib/view/pages/timetable/timetable.dart @@ -3,6 +3,7 @@ import 'dart:async'; import 'package:flutter/material.dart'; import 'package:marianum_mobile/extensions/dateTime.dart'; +import 'package:marianum_mobile/view/pages/timetable/addCustomTimetableEventDialog.dart'; import 'package:provider/provider.dart'; import 'package:syncfusion_flutter_calendar/calendar.dart'; @@ -64,6 +65,12 @@ class _TimetableState extends State { controller.displayDate = DateTime.now().add(const Duration(days: 2)); } ), + IconButton( + icon: const Icon(Icons.add_card_outlined), + onPressed: () { + showDialog(context: context, builder: (context) => const AddCustomTimetableEventDialog()); + }, + ), ], ), body: Consumer(