claude refactorings, flutter best practices, platform dependent changes, general cleanup

This commit is contained in:
2026-05-06 11:58:50 +02:00
parent 4b1d4379a0
commit 4e1272aba9
281 changed files with 1948 additions and 1041 deletions
@@ -0,0 +1,48 @@
import 'package:dio/dio.dart';
import 'package:enough_icalendar/enough_icalendar.dart';
import '../bloc/marianum_dates_state.dart';
class MarianumDatesGetEvents {
static const String url = 'https://public-cal.marianumlan.de/cal_public/ad4c5da8-7466-9c72-89cb-8b8d9a5cf26c';
final Dio _dio = Dio(BaseOptions(
connectTimeout: const Duration(seconds: 10),
receiveTimeout: const Duration(seconds: 30),
));
Future<List<MarianumDate>> run() async {
final response = await _dio.get<String>(url);
final body = response.data;
if (body == null || body.isEmpty) return [];
final root = VComponent.parse(body);
final calendar = root is VCalendar ? root : null;
final source = calendar?.children ?? root.children;
final events = source.whereType<VEvent>().map(_toMarianumDate).whereType<MarianumDate>().toList();
events.sort((a, b) => a.start.compareTo(b.start));
return events;
}
static MarianumDate? _toMarianumDate(VEvent e) {
final start = e.start;
if (start == null) return null;
final end = e.end ?? start;
final isAllDay = _isAllDay(start, end);
return MarianumDate(
uid: e.uid,
title: e.summary ?? '',
description: e.description,
start: start,
end: end,
isAllDay: isAllDay,
);
}
static bool _isAllDay(DateTime start, DateTime end) {
final startMidnight = start.hour == 0 && start.minute == 0 && start.second == 0;
final endMidnight = end.hour == 0 && end.minute == 0 && end.second == 0;
return startMidnight && endMidnight && end.difference(start).inHours % 24 == 0;
}
}