Sélection de l'événement dans la vue semaine

This commit is contained in:
2025-05-22 12:45:32 +02:00
parent 2c61b9ce8d
commit 249a6d6074
2 changed files with 41 additions and 2 deletions

View File

@ -149,6 +149,7 @@ class _CalendarPageState extends State<CalendarPage> {
onEventSelected: (event) { onEventSelected: (event) {
setState(() { setState(() {
_selectedEvent = event; _selectedEvent = event;
_selectedDay = event.startDateTime;
}); });
}, },
onSwitchToMonth: () { onSwitchToMonth: () {
@ -156,6 +157,33 @@ class _CalendarPageState extends State<CalendarPage> {
_calendarFormat = CalendarFormat.month; _calendarFormat = CalendarFormat.month;
}); });
}, },
onDaySelected: (selectedDay) {
final eventsForDay = eventProvider.events
.where((e) =>
e.startDateTime.year == selectedDay.year &&
e.startDateTime.month == selectedDay.month &&
e.startDateTime.day == selectedDay.day)
.toList();
eventsForDay
.sort((a, b) => a.startDateTime.compareTo(b.startDateTime));
setState(() {
_selectedDay = selectedDay;
if (eventsForDay.isNotEmpty) {
_selectedEvent = eventsForDay.first;
} else {
_selectedEvent = null;
}
});
if (eventsForDay.isEmpty) {
ScaffoldMessenger.of(context).showSnackBar(
const SnackBar(
content: Text("Aucun événement ne démarre à cette date."),
duration: Duration(seconds: 2),
),
);
}
},
selectedEvent: _selectedEvent,
); );
} else { } else {
return MonthView( return MonthView(

View File

@ -9,6 +9,8 @@ class WeekView extends StatelessWidget {
final Function(int) onWeekChange; final Function(int) onWeekChange;
final Function(EventModel) onEventSelected; final Function(EventModel) onEventSelected;
final Function() onSwitchToMonth; final Function() onSwitchToMonth;
final Function(DateTime) onDaySelected;
final EventModel? selectedEvent;
const WeekView({ const WeekView({
super.key, super.key,
@ -17,6 +19,8 @@ class WeekView extends StatelessWidget {
required this.onWeekChange, required this.onWeekChange,
required this.onEventSelected, required this.onEventSelected,
required this.onSwitchToMonth, required this.onSwitchToMonth,
required this.onDaySelected,
required this.selectedEvent,
}); });
@override @override
@ -253,6 +257,8 @@ class WeekView extends StatelessWidget {
final endHour = e.end.hour + e.end.minute / 60; final endHour = e.end.hour + e.end.minute / 60;
final duration = endHour - startHour; final duration = endHour - startHour;
final width = dayWidth / e.totalColumns; final width = dayWidth / e.totalColumns;
final isSelected =
selectedEvent != null && e.event.id == selectedEvent!.id;
return Positioned( return Positioned(
left: dayIdx * dayWidth + e.column * width, left: dayIdx * dayWidth + e.column * width,
@ -265,8 +271,13 @@ class WeekView extends StatelessWidget {
margin: const EdgeInsets.all(2), margin: const EdgeInsets.all(2),
padding: const EdgeInsets.all(4), padding: const EdgeInsets.all(4),
decoration: BoxDecoration( decoration: BoxDecoration(
color: AppColors.rouge.withAlpha(26), color: isSelected
border: Border.all(color: AppColors.rouge), ? AppColors.rouge.withAlpha(80)
: AppColors.rouge.withAlpha(26),
border: Border.all(
color: AppColors.rouge,
width: isSelected ? 3 : 1,
),
borderRadius: BorderRadius.circular(4), borderRadius: BorderRadius.circular(4),
), ),
child: Column( child: Column(