From a2f1ccae7b7b7d97ecc02eb373b3bdb443ff5295 Mon Sep 17 00:00:00 2001 From: Pupsi28 Date: Sun, 17 Mar 2024 17:01:18 +0100 Subject: [PATCH] option to change custom timetable event colors --- .../customTimetableEvent.dart | 3 +- .../customTimetableEvent.g.dart | 2 + .../customTimetableEventEditDialog.dart | 33 ++++++++++++++++ .../timetable/custonTimetableColors.dart | 39 +++++++++++++++++++ lib/view/pages/timetable/timetable.dart | 3 +- 5 files changed, 78 insertions(+), 2 deletions(-) create mode 100644 lib/view/pages/timetable/custonTimetableColors.dart 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/customTimetableEventEditDialog.dart b/lib/view/pages/timetable/customTimetableEventEditDialog.dart index f1b3791..4d925ce 100644 --- a/lib/view/pages/timetable/customTimetableEventEditDialog.dart +++ b/lib/view/pages/timetable/customTimetableEventEditDialog.dart @@ -4,6 +4,7 @@ import 'dart:developer'; import 'package:flutter/material.dart'; import 'package:jiffy/jiffy.dart'; import 'package:marianum_mobile/extensions/dateTime.dart'; +import 'package:marianum_mobile/view/pages/timetable/custonTimetableColors.dart'; import 'package:provider/provider.dart'; import 'package:rrule_generator/rrule_generator.dart'; import 'package:time_range_picker/time_range_picker.dart'; @@ -32,6 +33,10 @@ class _AddCustomTimetableEventDialogState extends State element.name == widget.existingEvent?.color, + orElse: () => CustomTimetableColors.orange + ); 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 element.name == color)).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/timetable.dart b/lib/view/pages/timetable/timetable.dart index d0c9614..415513f 100644 --- a/lib/view/pages/timetable/timetable.dart +++ b/lib/view/pages/timetable/timetable.dart @@ -3,6 +3,7 @@ import 'dart:async'; import 'package:flutter/material.dart'; import 'package:marianum_mobile/extensions/dateTime.dart'; +import 'package:marianum_mobile/view/pages/timetable/custonTimetableColors.dart'; import 'package:provider/provider.dart'; import 'package:syncfusion_flutter_calendar/calendar.dart'; @@ -289,7 +290,7 @@ class _TimetableState extends State { location: customEvent.description, subject: customEvent.title, recurrenceRule: customEvent.rrule, - color: Colors.deepOrange.shade800, + color: TimetableColors.getColorFromString(customEvent.color ?? CustomTimetableColors.orange.name), startTimeZone: '', endTimeZone: '', );