diff --git a/lib/api/mhsl/customTimetableEvent/customTimetableEvent.dart b/lib/api/mhsl/customTimetableEvent/customTimetableEvent.dart index c6b668a..1a8efe5 100644 --- a/lib/api/mhsl/customTimetableEvent/customTimetableEvent.dart +++ b/lib/api/mhsl/customTimetableEvent/customTimetableEvent.dart @@ -13,6 +13,7 @@ class CustomTimetableEvent { DateTime startDate; @JsonKey(toJson: MhslApi.dateTimeToJson, fromJson: MhslApi.dateTimeFromJson) DateTime endDate; + String? color; String rrule; @JsonKey(toJson: MhslApi.dateTimeToJson, fromJson: MhslApi.dateTimeFromJson) DateTime createdAt; @@ -20,7 +21,7 @@ class CustomTimetableEvent { DateTime updatedAt; CustomTimetableEvent({required this.id, required this.title, required this.description, required this.startDate, - required this.endDate, required this.rrule, required this.createdAt, required this.updatedAt}); + required this.endDate, required this.color, required this.rrule, required this.createdAt, required this.updatedAt}); factory CustomTimetableEvent.fromJson(Map json) => _$CustomTimetableEventFromJson(json); Map toJson() => _$CustomTimetableEventToJson(this); diff --git a/lib/api/mhsl/customTimetableEvent/customTimetableEvent.g.dart b/lib/api/mhsl/customTimetableEvent/customTimetableEvent.g.dart index 2d6416a..433f7e6 100644 --- a/lib/api/mhsl/customTimetableEvent/customTimetableEvent.g.dart +++ b/lib/api/mhsl/customTimetableEvent/customTimetableEvent.g.dart @@ -14,6 +14,7 @@ CustomTimetableEvent _$CustomTimetableEventFromJson( description: json['description'] as String, startDate: MhslApi.dateTimeFromJson(json['startDate'] as String), endDate: MhslApi.dateTimeFromJson(json['endDate'] as String), + color: json['color'] as String?, rrule: json['rrule'] as String, createdAt: MhslApi.dateTimeFromJson(json['createdAt'] as String), updatedAt: MhslApi.dateTimeFromJson(json['updatedAt'] as String), @@ -27,6 +28,7 @@ Map _$CustomTimetableEventToJson( 'description': instance.description, 'startDate': MhslApi.dateTimeToJson(instance.startDate), 'endDate': MhslApi.dateTimeToJson(instance.endDate), + 'color': instance.color, 'rrule': instance.rrule, 'createdAt': MhslApi.dateTimeToJson(instance.createdAt), 'updatedAt': MhslApi.dateTimeToJson(instance.updatedAt), diff --git a/lib/view/pages/timetable/customTimetableColors.dart b/lib/view/pages/timetable/customTimetableColors.dart new file mode 100644 index 0000000..060bf0c --- /dev/null +++ b/lib/view/pages/timetable/customTimetableColors.dart @@ -0,0 +1,42 @@ +import 'package:flutter/material.dart'; + +import '../../../theming/darkAppTheme.dart'; + +enum CustomTimetableColors { + orange, + red, + green, + blue +} + +class TimetableColors { + static const CustomTimetableColors defaultColor = CustomTimetableColors.orange; + + static ColorModeDisplay getDisplayOptions(CustomTimetableColors color) { + switch(color) { + case CustomTimetableColors.green: + return ColorModeDisplay(color: Colors.green, displayName: "GrĂ¼n"); + + case CustomTimetableColors.blue: + return ColorModeDisplay(color: Colors.blue, displayName: "Blau"); + + case CustomTimetableColors.orange: + return ColorModeDisplay(color: Colors.orange.shade800, displayName: "Orange"); + + case CustomTimetableColors.red: + return ColorModeDisplay(color: DarkAppTheme.marianumRed, displayName: "Rot"); + + } + } + + static Color getColorFromString(String color) { + return getDisplayOptions(CustomTimetableColors.values.firstWhere((element) => element.name == color, orElse: () => TimetableColors.defaultColor)).color; + } +} + +class ColorModeDisplay { + final Color color; + final String displayName; + + ColorModeDisplay({required this.color, required this.displayName}); +} \ No newline at end of file diff --git a/lib/view/pages/timetable/customTimetableEventEditDialog.dart b/lib/view/pages/timetable/customTimetableEventEditDialog.dart index f1b3791..c25fd82 100644 --- a/lib/view/pages/timetable/customTimetableEventEditDialog.dart +++ b/lib/view/pages/timetable/customTimetableEventEditDialog.dart @@ -16,6 +16,7 @@ import '../../../api/mhsl/customTimetableEvent/update/updateCustomTimetableEvent import '../../../model/accountData.dart'; import '../../../model/timetable/timetableProps.dart'; import '../../../widget/infoDialog.dart'; +import 'customTimetableColors.dart'; class CustomTimetableEventEditDialog extends StatefulWidget { final CustomTimetableEvent? existingEvent; @@ -32,6 +33,10 @@ class _AddCustomTimetableEventDialogState extends State element.name == widget.existingEvent?.color, + orElse: () => TimetableColors.defaultColor + ); late bool isEditingExisting = widget.existingEvent != null; @@ -77,6 +82,7 @@ class _AddCustomTimetableEventDialogState extends State( + value: _customTimetableColor, + icon: const Icon(Icons.arrow_drop_down), + items: CustomTimetableColors.values.map((e) => DropdownMenuItem( + value: e, + enabled: e != _customTimetableColor, + child: Row( + children: [ + Icon(Icons.circle, color: TimetableColors.getDisplayOptions(e).color), + const SizedBox(width: 10), + Text(TimetableColors.getDisplayOptions(e).displayName), + ], + ), + )).toList(), + onChanged: (e) { + setState(() { + _customTimetableColor = e!; + }); + }, + ), + ), + const Divider(), RRuleGenerator( config: RRuleGeneratorConfig( headerEnabled: true, @@ -156,6 +188,7 @@ class _AddCustomTimetableEventDialogState extends State { location: customEvent.description, subject: customEvent.title, recurrenceRule: customEvent.rrule, - color: Colors.deepOrange, + color: TimetableColors.getColorFromString(customEvent.color ?? TimetableColors.defaultColor.name), startTimeZone: '', endTimeZone: '', );