Files
Client/lib/view/pages/timetable/widgets/appointment_tile.dart
T
2026-05-04 13:54:39 +02:00

69 lines
2.2 KiB
Dart

import 'package:flutter/material.dart';
import 'package:syncfusion_flutter_calendar/calendar.dart';
import 'cross_painter.dart';
class AppointmentTile extends StatelessWidget {
final CalendarAppointmentDetails details;
final bool crossedOut;
const AppointmentTile({super.key, required this.details, this.crossedOut = false});
@override
Widget build(BuildContext context) {
final Appointment meeting = details.appointments.first;
final isPast = meeting.endTime.isBefore(DateTime.now());
final color = meeting.color.withAlpha(isPast ? 100 : 255);
return Stack(
children: [
Container(
padding: const EdgeInsets.all(3),
height: details.bounds.height,
alignment: Alignment.topLeft,
decoration: BoxDecoration(
shape: BoxShape.rectangle,
borderRadius: const BorderRadius.all(Radius.circular(5)),
color: color,
),
child: SingleChildScrollView(
child: Column(
crossAxisAlignment: CrossAxisAlignment.start,
children: [
FittedBox(
fit: BoxFit.fitWidth,
child: Text(
meeting.subject,
style: const TextStyle(color: Colors.white, fontSize: 15, fontWeight: FontWeight.w500),
maxLines: 1,
softWrap: false,
),
),
FittedBox(
fit: BoxFit.fitWidth,
child: Text(
meeting.location?.isNotEmpty == true ? meeting.location! : ' ',
maxLines: 3,
overflow: TextOverflow.ellipsis,
style: const TextStyle(color: Colors.white, fontSize: 10),
),
),
],
),
),
),
if (crossedOut)
Positioned.fill(
child: Container(
decoration: BoxDecoration(
border: Border.all(width: 2, color: Colors.red.withAlpha(200)),
borderRadius: const BorderRadius.all(Radius.circular(5)),
),
child: CustomPaint(painter: CrossPainter()),
),
),
],
);
}
}