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}); @override State createState() => _AddCustomTimetableEventDialogState(); } class _AddCustomTimetableEventDialogState extends State { 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: 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: _date, firstDate: DateTime.now(), lastDate: DateTime(2101), ); if (pickedDate != null && pickedDate != _date) { setState(() { _date = pickedDate; }); } }, ), ListTile( title: Text(_starTime.format(context).toString()), subtitle: const Text("Beginnend"), onTap: () async { final TimeOfDay? pickedTime = await showTimePicker( context: context, initialTime: _starTime, ); if(pickedTime == null) return; setState(() { _starTime = pickedTime; }); }, ), 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(() { _endTime = pickedTime; }); } }, ), const Divider(), RRuleGenerator( config: RRuleGeneratorConfig( headerEnabled: true, weekdayBackgroundColor: Theme.of(context).colorScheme.secondary, weekdaySelectedBackgroundColor: Theme.of(context).primaryColor, weekdayColor: Colors.black, ), initialRRule: _recurringRule, textDelegate: const GermanRRuleTextDelegate(), onChange: (String newValue) { log("Rule: $newValue"); setState(() { _recurringRule = newValue; }); }, ) ], ), ), actions: [ TextButton( onPressed: () { Navigator.of(context).pop(); }, child: const Text('Abbrechen'), ), TextButton( onPressed: () { // Hier kannst du die Eingaben verwenden String startDate = '${_date.day}/${_date.month}/${_date.year}'; String startTime = '${_starTime.hour}:${_starTime.minute}'; String endTime = '${_endTime.hour}:${_endTime.minute}'; String eventName = _eventName.text; String recurringFrequency = _recurringRule; // Hier kannst du die Daten speichern oder weiterverarbeiten print('Startdatum: $startDate'); print('Startzeit: $startTime'); print('Endzeit: $endTime'); print('Terminname: $eventName'); // Hier könntest du die Termindaten weiterverarbeiten, z.B. speichern und den Dialog schließen Navigator.of(context).pop(); }, child: const Text('Hinzufügen'), ), ], ); } }