Client/lib/view/pages/timetable/addCustomTimetableEventDialog.dart

152 lines
5.2 KiB
Dart

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<AddCustomTimetableEventDialog> createState() => _AddCustomTimetableEventDialogState();
}
class _AddCustomTimetableEventDialogState extends State<AddCustomTimetableEventDialog> {
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: <Widget>[
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: <Widget>[
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'),
),
],
);
}
}