Sélection de l'événement dans la vue semaine
This commit is contained in:
@ -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(
|
||||||
|
@ -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(
|
||||||
|
Reference in New Issue
Block a user