Skip to content

Commit 02b2abc

Browse files
authored
Merge pull request #511 from DevKor-github/codexd/fix-calendar-selected-schedule-marker
2 parents 64e12f7 + 3e1772a commit 02b2abc

4 files changed

Lines changed: 65 additions & 0 deletions

File tree

lib/presentation/calendar/screens/calendar_screen.dart

Lines changed: 8 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -13,6 +13,7 @@ import 'package:on_time_front/presentation/calendar/component/schedule_detail.da
1313
import 'package:on_time_front/presentation/schedule_create/screens/schedule_create_screen.dart';
1414
import 'package:on_time_front/presentation/schedule_create/screens/schedule_edit_screen.dart';
1515
import 'package:on_time_front/presentation/shared/components/calendar/centered_calendar_header.dart';
16+
import 'package:on_time_front/presentation/shared/components/calendar/schedule_marker_builder.dart';
1617
import 'package:on_time_front/presentation/shared/components/two_button_delete_dialog.dart';
1718
import 'package:on_time_front/presentation/shared/theme/calendar_theme.dart';
1819
import 'package:on_time_front/presentation/shared/theme/theme.dart';
@@ -295,6 +296,13 @@ class _CalendarScreenState extends State<CalendarScreen> {
295296
.headerStyle.rightChevronIcon,
296297
);
297298
},
299+
markerBuilder: (context, day, events) {
300+
return selectedDayScheduleMarkerBuilder(
301+
selectedDay: _selectedDate,
302+
day: day,
303+
events: events,
304+
);
305+
},
298306
selectedBuilder: (context, day, focusedDay) {
299307
return Container(
300308
margin: const EdgeInsets.all(2.0),

lib/presentation/home/components/month_calendar.dart

Lines changed: 8 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -2,6 +2,7 @@ import 'package:flutter/material.dart';
22
import 'package:flutter_bloc/flutter_bloc.dart';
33
import 'package:on_time_front/presentation/calendar/bloc/monthly_schedules_bloc.dart';
44
import 'package:on_time_front/presentation/shared/components/calendar/centered_calendar_header.dart';
5+
import 'package:on_time_front/presentation/shared/components/calendar/schedule_marker_builder.dart';
56
import 'package:on_time_front/presentation/shared/theme/calendar_theme.dart';
67
import 'package:table_calendar/table_calendar.dart';
78

@@ -169,6 +170,13 @@ class _MonthCalendarState extends State<MonthCalendar> {
169170
rightIcon: calendarTheme.headerStyle.rightChevronIcon,
170171
);
171172
},
173+
markerBuilder: (context, day, events) {
174+
return selectedDayScheduleMarkerBuilder(
175+
selectedDay: _selectedDay,
176+
day: day,
177+
events: events,
178+
);
179+
},
172180
selectedBuilder: (context, day, focusedDay) {
173181
return Container(
174182
margin: const EdgeInsets.all(4.0),
Lines changed: 14 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,14 @@
1+
import 'package:flutter/widgets.dart';
2+
import 'package:table_calendar/table_calendar.dart';
3+
4+
Widget? selectedDayScheduleMarkerBuilder<T>({
5+
required DateTime selectedDay,
6+
required DateTime day,
7+
required List<T> events,
8+
}) {
9+
if (events.isNotEmpty && isSameDay(selectedDay, day)) {
10+
return const SizedBox.shrink();
11+
}
12+
13+
return null;
14+
}
Lines changed: 35 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,35 @@
1+
import 'package:flutter/widgets.dart';
2+
import 'package:flutter_test/flutter_test.dart';
3+
import 'package:on_time_front/presentation/shared/components/calendar/schedule_marker_builder.dart';
4+
5+
void main() {
6+
test('hides schedule marker when the day is selected', () {
7+
final marker = selectedDayScheduleMarkerBuilder(
8+
selectedDay: DateTime(2026, 5, 11),
9+
day: DateTime(2026, 5, 11, 9),
10+
events: const [Object()],
11+
);
12+
13+
expect(marker, isA<SizedBox>());
14+
});
15+
16+
test('uses the default marker when a scheduled day is not selected', () {
17+
final marker = selectedDayScheduleMarkerBuilder(
18+
selectedDay: DateTime(2026, 5, 11),
19+
day: DateTime(2026, 5, 12),
20+
events: const [Object()],
21+
);
22+
23+
expect(marker, isNull);
24+
});
25+
26+
test('uses the default empty-day behavior when there are no events', () {
27+
final marker = selectedDayScheduleMarkerBuilder<Object>(
28+
selectedDay: DateTime(2026, 5, 11),
29+
day: DateTime(2026, 5, 11),
30+
events: const [],
31+
);
32+
33+
expect(marker, isNull);
34+
});
35+
}

0 commit comments

Comments
 (0)