152 lines
5.2 KiB
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'),
|
|
),
|
|
],
|
|
);
|
|
}
|
|
}
|