diff --git a/lib/view/pages/timetable/addCustomTimetableEventDialog.dart b/lib/view/pages/timetable/addCustomTimetableEventDialog.dart index 8a55b49..5f1da11 100644 --- a/lib/view/pages/timetable/addCustomTimetableEventDialog.dart +++ b/lib/view/pages/timetable/addCustomTimetableEventDialog.dart @@ -1,4 +1,9 @@ + +import 'dart:developer'; + import 'package:flutter/material.dart'; +import 'package:jiffy/jiffy.dart'; +import 'package:rrule_generator/rrule_generator.dart'; class AddCustomTimetableEventDialog extends StatefulWidget { const AddCustomTimetableEventDialog({super.key}); @@ -8,98 +13,108 @@ class AddCustomTimetableEventDialog extends StatefulWidget { } 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'; + DateTime _date = DateTime.now(); + TimeOfDay _starTime = TimeOfDay.now().replacing(minute: 00); + TimeOfDay _endTime = TimeOfDay.now().replacing(minute: 30); + final TextEditingController _eventName = TextEditingController(); + final TextEditingController _eventDescription = TextEditingController(); + String _recurringRule = ""; @override Widget build(BuildContext context) { return AlertDialog( + insetPadding: const EdgeInsets.all(20), + contentPadding: const EdgeInsets.all(10), 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}'), + title: TextField( + controller: _eventName, + autofocus: true, + decoration: const InputDecoration( + labelText: "Terminname", + border: OutlineInputBorder() + ), + ), + ), + ListTile( + title: TextField( + controller: _eventDescription, + maxLines: 2, + minLines: 2, + decoration: const InputDecoration( + labelText: "Beschreibung", + border: OutlineInputBorder() + ), + ), + ), + const Divider(), + ListTile( + title: Text(Jiffy.parseFromDateTime(_date).yMMMd), + subtitle: const Text("Datum"), onTap: () async { final DateTime? pickedDate = await showDatePicker( context: context, - initialDate: _selectedDate, + initialDate: _date, firstDate: DateTime.now(), lastDate: DateTime(2101), ); - if (pickedDate != null && pickedDate != _selectedDate) { + if (pickedDate != null && pickedDate != _date) { setState(() { - _selectedDate = pickedDate; + _date = pickedDate; }); } }, ), ListTile( - title: const Text('Startzeit:'), - subtitle: Text('${_selectedStartTime.hour}:${_selectedStartTime.minute}'), + title: Text(_starTime.format(context).toString()), + subtitle: const Text("Beginnend"), onTap: () async { final TimeOfDay? pickedTime = await showTimePicker( context: context, - initialTime: _selectedStartTime, + initialTime: _starTime, ); - 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) { + if(pickedTime == null) return; setState(() { - _isRecurring = value!; + _starTime = pickedTime; }); }, ), - 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) { + ListTile( + title: Text(_endTime.format(context).toString()), + subtitle: const Text("Endend"), + onTap: () async { + final TimeOfDay? pickedTime = await showTimePicker( + context: context, + initialTime: _endTime, + ); + if (pickedTime != null && pickedTime != _endTime) { setState(() { - _recurringFrequency = value ?? ""; + _endTime = pickedTime; }); - }, + } + }, + ), + const Divider(), + RRuleGenerator( + config: RRuleGeneratorConfig( + headerEnabled: true, + weekdayBackgroundColor: Theme.of(context).colorScheme.secondary, + weekdaySelectedBackgroundColor: Theme.of(context).primaryColor, + weekdayColor: Colors.black, ), - // Hier könntest du weitere Felder für die Wiederholungseigenschaften hinzufügen - ], + initialRRule: _recurringRule, + textDelegate: const GermanRRuleTextDelegate(), + onChange: (String newValue) { + log("Rule: $newValue"); + setState(() { + _recurringRule = newValue; + }); + }, + ) ], ), ), @@ -113,22 +128,17 @@ class _AddCustomTimetableEventDialogState extends State { } ), IconButton( - icon: const Icon(Icons.add_card_outlined), + icon: const Icon(Icons.add_outlined), onPressed: () { - showDialog(context: context, builder: (context) => const AddCustomTimetableEventDialog()); + showDialog( + context: context, + builder: (context) => const AddCustomTimetableEventDialog(), + barrierDismissible: false, + ); }, ), ], diff --git a/pubspec.yaml b/pubspec.yaml index dd5135f..fb41e3d 100644 --- a/pubspec.yaml +++ b/pubspec.yaml @@ -93,6 +93,7 @@ dependencies: flutter_app_badger: ^1.5.0 qr_flutter: ^4.1.0 easy_debounce: ^2.0.3 + rrule_generator: ^0.5.6 dev_dependencies: flutter_test: