feat: Introduce memberIds for efficient group querying and management, updating related UI components and .gitignore.
This commit is contained in:
@@ -36,6 +36,37 @@ class _CalendarPageState extends State<CalendarPage> {
|
||||
}).toList();
|
||||
}
|
||||
|
||||
Future<void> _selectTimeAndSchedule(Activity activity, DateTime date) async {
|
||||
final TimeOfDay? pickedTime = await showTimePicker(
|
||||
context: context,
|
||||
initialTime: TimeOfDay.now(),
|
||||
builder: (BuildContext context, Widget? child) {
|
||||
return MediaQuery(
|
||||
data: MediaQuery.of(context).copyWith(alwaysUse24HourFormat: true),
|
||||
child: child!,
|
||||
);
|
||||
},
|
||||
);
|
||||
|
||||
if (pickedTime != null && mounted) {
|
||||
final scheduledDate = DateTime(
|
||||
date.year,
|
||||
date.month,
|
||||
date.day,
|
||||
pickedTime.hour,
|
||||
pickedTime.minute,
|
||||
);
|
||||
|
||||
context.read<ActivityBloc>().add(
|
||||
UpdateActivityDate(
|
||||
tripId: widget.trip.id!,
|
||||
activityId: activity.id,
|
||||
date: scheduledDate,
|
||||
),
|
||||
);
|
||||
}
|
||||
}
|
||||
|
||||
@override
|
||||
Widget build(BuildContext context) {
|
||||
final theme = Theme.of(context);
|
||||
@@ -172,7 +203,9 @@ class _CalendarPageState extends State<CalendarPage> {
|
||||
selectedActivities[index];
|
||||
return ListTile(
|
||||
title: Text(activity.name),
|
||||
subtitle: Text(activity.category),
|
||||
subtitle: Text(
|
||||
'${activity.category} - ${DateFormat('HH:mm').format(activity.date!)}',
|
||||
),
|
||||
trailing: IconButton(
|
||||
icon: const Icon(Icons.close),
|
||||
onPressed: () {
|
||||
@@ -243,15 +276,10 @@ class _CalendarPageState extends State<CalendarPage> {
|
||||
icon: const Icon(Icons.arrow_back),
|
||||
onPressed: () {
|
||||
if (_selectedDay != null) {
|
||||
context
|
||||
.read<ActivityBloc>()
|
||||
.add(
|
||||
UpdateActivityDate(
|
||||
tripId: widget.trip.id!,
|
||||
activityId: activity.id,
|
||||
date: _selectedDay,
|
||||
),
|
||||
);
|
||||
_selectTimeAndSchedule(
|
||||
activity,
|
||||
_selectedDay!,
|
||||
);
|
||||
}
|
||||
},
|
||||
),
|
||||
@@ -260,6 +288,33 @@ class _CalendarPageState extends State<CalendarPage> {
|
||||
},
|
||||
),
|
||||
),
|
||||
// Zone de drop pour le calendrier
|
||||
DragTarget<Activity>(
|
||||
onWillAccept: (data) => true,
|
||||
onAccept: (activity) {
|
||||
if (_selectedDay != null) {
|
||||
_selectTimeAndSchedule(activity, _selectedDay!);
|
||||
}
|
||||
},
|
||||
builder: (context, candidateData, rejectedData) {
|
||||
return Container(
|
||||
height: 50,
|
||||
color: candidateData.isNotEmpty
|
||||
? theme.colorScheme.primary.withValues(
|
||||
alpha: 0.1,
|
||||
)
|
||||
: null,
|
||||
child: Center(
|
||||
child: Text(
|
||||
'Glisser ici pour planifier',
|
||||
style: TextStyle(
|
||||
color: theme.colorScheme.primary,
|
||||
),
|
||||
),
|
||||
),
|
||||
);
|
||||
},
|
||||
),
|
||||
],
|
||||
),
|
||||
),
|
||||
|
||||
Reference in New Issue
Block a user