2025-05-26 12:22:10 +02:00

119 lines
3.4 KiB
Dart

import 'package:flutter/material.dart';
import 'package:intl/intl.dart';
import 'package:insparkspokalen_ui/services/backend/activityService.dart';
import 'package:insparkspokalen_ui/models/activityModel.dart';
class Calendar extends StatefulWidget {
const Calendar({super.key});
@override
State<Calendar> createState() => _CalendarState();
}
class _CalendarState extends State<Calendar> {
List<ActivityModel> aktiviteter = [];
@override
void initState() {
super.initState();
_fetchActivities();
}
void _fetchActivities() async {
try {
List<ActivityModel> fetchedActivities =
await ActivityService().fetchActivities();
fetchedActivities.sort(
(a, b) => a.date.compareTo(b.date),
); // Sortering: nyaste först
setState(() {
aktiviteter = fetchedActivities;
});
} catch (e) {
print("Error fetching activities: $e");
}
}
@override
Widget build(BuildContext context) {
return ListView.builder(
itemCount: aktiviteter.length,
itemBuilder: (context, index) {
final aktivitet = aktiviteter[index];
final datumStr = DateFormat('yyyy-MM-dd').format(aktivitet.date);
final startTidStr = aktivitet.startTime;
final slutTidStr = aktivitet.endTime ?? "Sent";
return Card(
margin: const EdgeInsets.symmetric(vertical: 8, horizontal: 16),
child: ListTile(
leading: const Icon(Icons.event, color: Color(0xFFDAA520)),
title: Text(aktivitet.name),
subtitle: Column(
crossAxisAlignment: CrossAxisAlignment.start,
children: [
Row(
children: [
const Icon(Icons.location_on, color: Colors.grey),
const SizedBox(width: 4),
Text(
aktivitet.place,
style: const TextStyle(color: Colors.grey),
),
],
),
Row(
children: [
const Icon(Icons.calendar_today, color: Colors.grey),
const SizedBox(width: 4),
Text(
"$datumStr · $startTidStr - $slutTidStr",
style: const TextStyle(color: Colors.grey),
),
],
),
if (aktivitet.description != null)
const Text(
"Tryck för beskrivning",
style: TextStyle(
color: Colors.blue,
fontStyle: FontStyle.italic,
),
),
],
),
onTap: () {
if (aktivitet.description != null) {
showDialog(
context: context,
builder:
(context) => AlertDialog(
title: Text(aktivitet.name),
content: Text(aktivitet.description!),
actions: [
TextButton(
onPressed: () => Navigator.pop(context),
child: const Text("Stäng"),
),
],
),
);
}
},
),
);
},
);
}
}